Bash脚本不会在循环中退出

时间:2013-12-27 10:25:49

标签: bash

我已经在HP / UX下面的脚本中运行并获得了输出:

Exiting #1
Exiting #2

但我希望输出:

Exiting #1

脚本文件:

data="aaa; bbb; ccc"

echo $data | while IFS=';' read -ra array; do
    echo "Exiting #1"
    exit -1
done


echo "Exiting #2"

exit 0

我该如何解决这个问题? 感谢。

2 个答案:

答案 0 :(得分:3)

由于管道,循环中的命令在子shell中运行。当您调用exit时,只会终止子shell,而不是父进程。

您可以使用shopt -s lastpipe,通过使用流程替换来解决此问题

while IFS=';' read -ra array; do
    echo "Exiting #1"
    exit -1
done < <(echo "$data")

或使用here-string

while IFS=';' read -ra array; do
    echo "Exiting #1"
    exit -1
done <<< "$data"

答案 1 :(得分:2)

当你在循环中执行exit -1时,它只会退出由于管道而创建的子进程。重写它以使用here-string:

 while IFS=';' read -ra array; do
    echo "Exiting #1"
    exit -1
done <<< ${data}

现在,您将获得预期的输出。

相关问题