Bash 脚本不会在循环中退出

标签 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

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

最佳答案

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

您可以通过使用 shopt -s lastpipe 和进程替换来克服这个问题

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

或者通过使用这里字符串

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

关于Bash 脚本不会在循环中退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798961/

相关文章:

python - 为什么 `source` 在 .bash_profile 中与 virtualenvwrapper 一起使用?

bash - 等待 Shell 脚本上的按键

linux - 从文件中删除所有附加扩展名

bash - [[ ]] 和 [] 字符串比较器 "<"的不同结果

string - bash文件重命名在特定位置添加字符串

bash - 删除 csv 文件的第一列

bash - 如何在 Bash 中执行由数组表示的命令

linux - Fred 的 ImageMagick Scripts-3DRotation 不工作,(3Drotate.sh : line 384: bc: command not found)

linux - 将脚本结果输出到文本文件然后将结果通过电子邮件发送到个人电子邮件的命令

bash - 比较两个文件内容