shell 如何为子进程应用“set -e”?

pbwdgjma  于 2023-04-21  发布在  Shell
关注(0)|答案(2)|浏览(105)

我在我的项目中使用bash shell脚本。
主脚本调用了很多子脚本,但有时子脚本有错误。我想脚本立即停止。
我发现-errexit选项。它将为我工作。
有限制。我不能编辑子脚本。另外,我不想碰执行线。
下面是例子。

#!/bin/bash

# do something

exec bash test.sh

test.sh

#!/bin/bash

cat as.txt  # error
cat ab.txt  # run

cat ab.txt不运行。
我知道,exex bash -e test.sh会运行。但真实的的项目代码是这样的,触摸exec线是危险的。

exec "$@"

我不知道什么是$@
如果我在'do something'中写入set -e,它不会应用于子进程(test.sh)。
我可以改变默认的选项脚本,如~/.bashrc?我如何应用shell选项的子进程?
请帮帮我!

k75qkfdt

k75qkfdt2#

我使用了一个类似的例子,当cat命令没有成功时,带有do something的脚本立即退出。
doSome.sh

#!/bin/bash

exec bash test.sh

test.sh

#!/bin/bash

cat text.txt
touch newfile

输出:

也许你不需要使用set -e
编辑:
文件已创建:

$ ll newfile
-rw-r--r-- 1 0000 0000 0 Sep 14 13:57 newfile

当用cat操作替换touch newfile时,它确实会继续运行,问题仍然存在。
一个可行的解决方案可能是在每行的基础上添加错误处理:
test.sh

#!/bin/bash

cat text.txt || exit 1
cat nofile.txt || exit 1

相关问题