终止shell脚本而不等待管道的早期部分

时间:2011-12-24 23:48:25

标签: bash pipe

考虑以下脚本:

#!/bin/bash
function long_running {
    for i in $(seq 1 10); do
        echo foo
        sleep 100
    done
}

long_running | head -n 1

这会产生预期的输出(一行“foo”),但在终止之前会休眠(指定的100秒)。我希望脚本在头部时立即终止。我如何强制bash立即实际退出?甚至将最后一行更改为

long_running | (head -n 1; exit)

或类似的不起作用;即使我用set -e之类的方式强行失败,我也无法得到另一个常见建议(head -n 1; false)

(这是我的真实代码的简化版本(显然),它不会睡觉;只是创建一组相当复杂的嵌套管道来搜索约束问题的各种解决方案;因为我只需要一个而不关心我得到了,我希望能够通过将head -n 1添加到调用来终止脚本...)

1 个答案:

答案 0 :(得分:3)

如何将函数发送到这样的头 -

#!/bin/bash
function long_running {
    for i in $(seq 1 10); do
        echo foo
        sleep 100
    done
}

head -n 1 <(long_running)

显然,如果你将-n增加到更大的数字,睡眠就会开始,但是一旦头完成就会退出。