相当于在命令行退出
equivalent of exit on command line
我有一个 bash 脚本,它 运行 是一系列 python 脚本。它总是 运行 所有这些,但如果任何脚本以失败代码退出,则以失败代码退出。至少那是我希望它做的。这是...
#!/bin/bash
res=0
for f in scripts/*.py
do
python "$f";
res=$(( $res | $? ))
done
exit $res
我想 运行 将此作为终端中的 bash 命令,但我不知道如何替换 exit
以便命令像失败的脚本,而不是退出终端。我该怎么做?
Bash 没有匿名函数(例如 Go)的概念,您可以内联定义并获取 return 值,您需要明确地执行此操作。将整个代码包装在一个函数中,比如 f()
f() {
local res=0
for f in scripts/*.py
do
python "$f";
res=$(( $res | $? ))
done
return $res
}
并在命令行中使用退出代码。
if ! f; then
printf '%s\n' "one more python scripts failed"
fi
将最后一行 exit $res
替换为
$(exit ${res})
这将退出生成的子 shell,退出值为 ${res}
,因为它是最后一条语句,所以这也是您脚本的退出值。
是吗,错误代码的值无关紧要。那我还有一个解决办法:
#!/bin/bash
total=0
errcount=0
for f in scripts/*.py
do
let total++
python "$f" || let errcount++
done
if ((errcount))
then
printf '%u of %u scripts failed\n' $errcount $total >&2
exit 1
fi
exit 0
#!/bin/bash
for f in scripts/*.py
do
python "$f" && echo "1" >> stack || echo "0" >> stack
done
[ $(grep -o stack) -eq 0 ] && rm -v ./stack && exit 1
此刻我很震惊,所以如果我误解了,我深表歉意,但我相信这会满足你的需要。每次 python 脚本 returns 一个错误代码 0,(这意味着它有效)一个 1 被回显到堆栈文件中。在循环结束时,检查堆栈是否存在单个 0,如果找到一个,则退出并返回错误代码 1,这是一般错误。
我有一个 bash 脚本,它 运行 是一系列 python 脚本。它总是 运行 所有这些,但如果任何脚本以失败代码退出,则以失败代码退出。至少那是我希望它做的。这是...
#!/bin/bash
res=0
for f in scripts/*.py
do
python "$f";
res=$(( $res | $? ))
done
exit $res
我想 运行 将此作为终端中的 bash 命令,但我不知道如何替换 exit
以便命令像失败的脚本,而不是退出终端。我该怎么做?
Bash 没有匿名函数(例如 Go)的概念,您可以内联定义并获取 return 值,您需要明确地执行此操作。将整个代码包装在一个函数中,比如 f()
f() {
local res=0
for f in scripts/*.py
do
python "$f";
res=$(( $res | $? ))
done
return $res
}
并在命令行中使用退出代码。
if ! f; then
printf '%s\n' "one more python scripts failed"
fi
将最后一行 exit $res
替换为
$(exit ${res})
这将退出生成的子 shell,退出值为 ${res}
,因为它是最后一条语句,所以这也是您脚本的退出值。
是吗,错误代码的值无关紧要。那我还有一个解决办法:
#!/bin/bash
total=0
errcount=0
for f in scripts/*.py
do
let total++
python "$f" || let errcount++
done
if ((errcount))
then
printf '%u of %u scripts failed\n' $errcount $total >&2
exit 1
fi
exit 0
#!/bin/bash
for f in scripts/*.py
do
python "$f" && echo "1" >> stack || echo "0" >> stack
done
[ $(grep -o stack) -eq 0 ] && rm -v ./stack && exit 1
此刻我很震惊,所以如果我误解了,我深表歉意,但我相信这会满足你的需要。每次 python 脚本 returns 一个错误代码 0,(这意味着它有效)一个 1 被回显到堆栈文件中。在循环结束时,检查堆栈是否存在单个 0,如果找到一个,则退出并返回错误代码 1,这是一般错误。