Bash中如何查看后台派生脚本的实时输出
问题原因
你遇到的现象本质是foo.sh把fee.sh放到后台运行后,没有等待后台子进程执行完成就直接退出了。此时终端会立刻切回shell交互状态,fee.sh的输出要么会打印在新的shell提示符之后,看起来就像没有输出,要么混杂在后续的命令输出中难以辨认。
可行解决方案
方案1:修改
foo.sh,末尾添加wait命令,等待所有后台子进程执行完成后再退出主脚本
修改后的foo.sh代码如下:#!/bin/bash # foo.sh echo "foo" ./fee.sh & wait调整后直接执行
./foo.sh就能正常看到foo和fee两行输出。方案2:将后台进程输出重定向到日志文件,用tail命令查看实时输出
该方案适合后台进程运行时间长、不需要和主脚本输出同步展示的场景,修改foo.sh中fee.sh的启动语句即可:./fee.sh >> /tmp/fee_runtime.log 2>&1 &其中
2>&1会把标准错误输出也同步重定向到日志文件,避免遗漏报错内容。执行foo.sh后,在任意终端执行以下命令即可查看实时输出:tail -f /tmp/fee_runtime.log方案3:临时验证无需修改原脚本的方法
对于运行耗时很短的后台子进程,只需要在执行foo.sh后加短暂等待,给后台进程留出输出时间即可看到结果:./foo.sh && sleep 0.5
内容的提问来源于stack exchange,提问作者tcamuso
相关产品推荐
相关产品推荐

