我正在更新一个旧脚本并遇到了一个我不熟悉的模式:
# NOTE The | : always returns true so the <cmd> doesn't fail
<cmd> | :
我在叉炸弹示例中只见过这种模式。如果有人问我如何完成评论中所说的内容,我会建议:
<cmd> ||:
在我把这个打成一个错字之前,有没有人看过这种模式并且能够解释它的用例?
答案 0 :(得分:9)
这也是一个错字,也恰好有类似的效果。差异:
cmd | :
将cmd
{s}输出到:
。由于:
会立即退出,如果cmd
写入任何内容,则可能会遇到SIGPIPE信号或EPIPE错误,通常会将其删除。† cmd | :
在子shell中运行cmd
,取消var=value
或cd /dir
等环境变化。将cd /tmp || :
与cd /tmp | :
进行比较。cmd | :
已启用,则set -o pipefail
无法正常工作。根据评论,它应该是|| :
。
†从技术上讲,它是一种竞争条件。 cmd
可以在:
退出之前写出一些内容,但不太可能。或者甚至更不可能,如果cmd
写了很多并填满管道的缓冲区,它实际上会阻止直到 :
退出,此时它正在等待{ {1}}系统调用将收到EPIPE / SIGPIPE。您可以使用write()
答案 1 :(得分:-1)
我认为这是一种抑制命令标准输出的方法,它相当于:
MAX()
我认为在您不想显示cmd输出的脚本中它很有用