首页 > 解决方案 > 隐藏分段错误,同时让以下命令了解此事件

问题描述

这个问题询问了如何在 bash 脚本中隐藏分段错误,@yellowantphil 提供了一个解决方案:将输出通过管道传输到任何地方

现在我正在浏览我的学生提交的大量存储库。我需要检查每个存储库中的源代码是否可以编译,如果可以,可执行文件是否可以正常工作。

而且我观察到他们的一些可执行文件以输出“分段错误”而失败。因为我想在我的脚本中隐藏大部分细节,所以我不想显示任何这些烦人的输出(因此我找到了上面提到的问题)。但是,我仍然需要注意这种情况(跳过循环)。我现在该怎么办?

这个问题的最小再现:

  1. 创建任何导致“分段错误”的可执行文件
  2. 将其放在 Bash 脚本中:
#!/bin/bash

./segfaultgen >/dev/null 2>&1 | :

echo $?

有了这个| :(在@yellowantphil的回答中提到),下面的句子显示了 output 0,它没有说实话。| :但是,如果注释掉,则会出现错误消息。我之前也尝试过|| echo 1附加| :。它也不起作用:(

标签: bashsegmentation-fault

解决方案


默认情况下,管道仅在右侧失败时才会失败。启用pipefail,因此如果任一命令失败,管道将失败。

(总的来说,这是一个不错的选择。我在所有脚本中默认启用它。)

#!/bin/bash

set -o pipefail

./segfaultgen &>/dev/null | :
echo $?

此外,由于您使用的是 bash,&>/dev/null因此更短。


推荐阅读