请考虑以下脚本:
#!/bin/bash
function long_running {
for i in $(seq 1 10); do
echo foo
sleep 100
done
}
long_running | head -n 1
Run Code Online (Sandbox Code Playgroud)
这会产生预期的输出(一行"foo")但在终止之前休眠(指定的100秒).我希望脚本在头部时立即终止.我如何强制bash立即实际退出?甚至改变最后一行
long_running | (head -n 1; exit)
Run Code Online (Sandbox Code Playgroud)
或类似的不起作用; set -e
即使我强迫失败,比如说等,我也无法得到另一个常见的建议(head -n 1; false)
.
(这是我的真实代码的简化版本(显然),它不会睡觉;只是创建一组相当复杂的嵌套管道来搜索约束问题的各种解决方案;因为我只需要一个而不关心我得到的,我希望能够通过添加head -n 1
到调用使脚本终止...)
像这样将函数发送到 head 怎么样?
#!/bin/bash
function long_running {
for i in $(seq 1 10); do
echo foo
sleep 100
done
}
head -n 1 <(long_running)
Run Code Online (Sandbox Code Playgroud)
显然,如果您将 增加到-n
更大的数字,睡眠就会开始,但一旦头部完成就会退出。