以下是Bash语句的翻译:
对于下面的bash语句:
tail -Fn0 /tmp/report | while [ 1 ]; do echo "pre"; exit; echo "past"; done
我得到了 "pre",但没有退出到bash提示符,然后如果我在 /tmp/report 中输入任何内容,我就可以从这个脚本退出并进入bash提示符。
我认为这是合理的。 'exit' 使 'while' 语句退出,但 'tail' 仍然存活。 如果有东西输入到 /tmp/report
,则 'tail' 将输出到管道,然后 'tail' 将检测到管道关闭,然后 'tail' 退出。
- 我说的对吗?如果不对,能否有人提供正确的解释?
- 是否可能向 'while' 语句中添加任何内容以立即从整个管道语句中退出?我知道我可以将 tail 的 pid 保存到一个临时文件中,在 'while' 中读取此文件,然后杀死 tail。 有更简单的方法吗?
- 让我扩大一下问题。如果在脚本文件中使用此 tail|while,是否可能同时实现以下项目? a. 如果输入 Ctrl-C 或信号到达主shell进程,则主shell和由主shell生成的各种子shell和后台进程将退出 b. 我可以仅在触发情况下从 tail|while 退出,并保留其他子进程继续运行 c. 最好不要使用临时文件或管道文件。