Bash 退出和进程替换

标签 bash process-substitution

如果函数失败,我想退出脚本。通常这不是问题,但如果使用进程替换,就会出现问题。

$ cat test.sh
#!/bin/bash

foo(){
  [ "$1" ] && echo pass || exit
}

read < <(foo 123)
read < <(foo)
echo 'SHOULD NOT SEE THIS'

$ ./test.sh
SHOULD NOT SEE THIS

基于CodeGnome’s answer这似乎有效

$ cat test.sh
#!/bin/bash

foo(){
  [ "$1" ] && echo pass || exit
}

read < <(foo 123) || exit
echo 'SHOULD SEE THIS'
read < <(foo) || exit
echo 'SHOULD NOT SEE THIS'

$ ./test.sh
SHOULD SEE THIS

最佳答案

如果发生任何失败,您可以使用set -e 退出脚本。对于较小的脚本来说,这通常就足够了,但缺乏粒度。

您还可以直接检查任何命令或函数的返回状态,或检查 $? 变量。例如:

foo () {
  return 1
}

foo || { echo "Return status: $?"; exit 1; }

关于Bash 退出和进程替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622408/

相关文章:

linux - BASH 脚本在/usr/bin 中查找

bash - "No such file or directory"简单的 bash 重定向

PHP & 庆典; Linux;编译我自己的函数

arrays - 使用循环的输出填充多个数组

linux - while循环cp给出部分文件的副本(linux)

bash - 为什么 `>` 重定向不捕获替代进程的标准输出?

bash - 了解 bash 中的嵌套进程替换,以及一点点 awk

bash - 进程替换为 grep 缺少预期输出

bash - 如何对 bash 中的文件列表执行多个命令(xargs?)

linux - 如何打印命令的结果以及结果的计数?