bash - 隐藏分段错误,同时让以下命令了解此事件
问题描述
这个问题询问了如何在 bash 脚本中隐藏分段错误,@yellowantphil 提供了一个解决方案:将输出通过管道传输到任何地方
现在我正在浏览我的学生提交的大量存储库。我需要检查每个存储库中的源代码是否可以编译,如果可以,可执行文件是否可以正常工作。
而且我观察到他们的一些可执行文件以输出“分段错误”而失败。因为我想在我的脚本中隐藏大部分细节,所以我不想显示任何这些烦人的输出(因此我找到了上面提到的问题)。但是,我仍然需要注意这种情况(跳过循环)。我现在该怎么办?
这个问题的最小再现:
- 创建任何导致“分段错误”的可执行文件
- 将其放在 Bash 脚本中:
#!/bin/bash
./segfaultgen >/dev/null 2>&1 | :
echo $?
有了这个| :
(在@yellowantphil的回答中提到),下面的句子显示了 output 0
,它没有说实话。| :
但是,如果注释掉,则会出现错误消息。我之前也尝试过|| echo 1
附加| :
。它也不起作用:(
解决方案
默认情况下,管道仅在右侧失败时才会失败。启用pipefail
,因此如果任一命令失败,管道将失败。
(总的来说,这是一个不错的选择。我在所有脚本中默认启用它。)
#!/bin/bash
set -o pipefail
./segfaultgen &>/dev/null | :
echo $?
此外,由于您使用的是 bash,&>/dev/null
因此更短。
推荐阅读
- c++ - Next Greater Element segfault 无法弄清楚
- php - 如果付款方式是货到付款,则 WooCommerce 禁用免费送货
- c++ - 是否可以在 C++ 中进行确定性指针生成(分配)?
- python - Xpath:如何检查标签是在文本之前还是在文本之后?
- python - 使用 python 实现 Json 的 Excel
- python - Spotify API 授权代码流失败({'error': 'invalid_grant', 'error_description': 'Invalid authentication code'})
- kendo-ui - 剑道角度图隐藏内容值
- azure-web-app-service - Azure 应用服务返回错误网关错误 502
- c# - MemoryStream 没有向文件写入任何内容
- javascript - 如何从函数组件传递状态,以便可以在 use-Context 中使用它