gpt4 book ai didi

bash - 将命令的输出通过管道传输到 ':' 命令

转载 作者:行者123 更新时间:2023-11-29 08:53:21 25 4
gpt4 key购买 nike

我正在更新一个旧脚本并遇到一个我不熟悉的模式:

# NOTE The | : always returns true so the <cmd> doesn't fail
<cmd> | :

我只在 fork 炸弹示例中见过这种模式。如果有人问我如何完成评论中所述的内容,我会建议:

<cmd> ||:

在我将其归结为打字错误之前,有没有人见过这种模式并能够解释它的用例?

最佳答案

这是一个打字错误,也恰好有类似的效果。差异:

  • 命令 | :cmd 的标准输出通过管道传输到 :。由于 : 会立即退出,如果 cmd 写入任何内容,它可能会遇到 SIGPIPE 信号或 EPIPE 错误,通常会将其杀死。<
  • 命令 | : 在子 shell 中运行 cmd,使 var=valuecd/dir 等环境变化无效。比较 cd/tmp || :cd/tmp | :.
  • 命令 | : 如果启用 set -o pipefail 将不起作用。

根据评论应该是 || :

从技术上讲,这是一个竞争条件。 cmd 可以在 : 退出之前写一些东西,尽管这不太可能。或者更不可能的是,如果 cmd 写了很多它并填满了管道的缓冲区,它实际上会阻塞 until : 退出,此时它的挂起的 write() 系统调用将收到 EPIPE/SIGPIPE。你可以用 strace -e write yes | 模拟这个{ sleep 0.1; :; }

关于bash - 将命令的输出通过管道传输到 ':' 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49200792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com