假设 bash 中有以下虚拟命令:
### dummy long_operation_cmd function, for easy reproduction:
function long_operation_cmd() {
echo "operation 1"
sleep 5
echo "operation 2"
}
我目前正在通过以下方式运行 bash 脚本:
{
long_operation_cmd
echo '===ALL DONE==='
} > /tmp/logfile.tmp &
tail -f /tmp/logfile.tmp | sed '/^===ALL DONE===$/ q' \
&& rm /tmp/logfile.tmp
这允许我在后台安全地运行长操作,跟踪输出,并确保 Ctrl+C 不会中断执行。
最重要的是,当操作完成后,sed
让我退出跟随模式。
我想用 替换tail -f
,less +F
这就是我想出的:
{
long_operation_cmd
echo '===ALL DONE==='
} > /tmp/logfile.tmp &
less +F -- /tmp/logfile.tmp \
&& rm /tmp/logfile.tmp
===ALL DONE===
但是,当达到模式(或long_operation_cmd
操作完成时)时,我想不出一种方法来自动脱离跟随模式。
关于解决这个问题的任何建议?