在Shell中使用日志重定向时如何获取函数的retune代码?
How to get retune code of function when using log redirection in Shell?
在我的shell脚本1中,有效。:
test1.sh
python main.py
if [[ $? -ne 0 ]]
then
exit
fi
test2.sh
python main.py 2>&1 | tee log.txt
if [[ $? -ne 0 ]]
then
exit
fi
脚本 2 失败。 python-call main
in test2.sh 的 return 代码怎么获取?
如果您在一行中使用多个命令,则需要使用 PIPESTATUS
为每个命令获取正确的 return 代码。
例如:
Python代码:
import sys
def exit_with_code():
sys.exit(5)
exit_with_code()
Shell 脚本:
python3 test.py 2>&1 | tee log.txt
echo "${PIPESTATUS[0]} ${PIPESTATUS[1]}"
输出:
5 0
表示Python
脚本的return代码为5,tee
脚本的return代码为0。
您可以在 if
之外进行重定向,同时避免反模式。
if ! python main.py; then
exit
fi 2>&1 | tee log.txt
(见)
您为 POSIX Shell 标记了您的问题,AFIK,在 POSIX Shell 中无法实现此目的。但是,许多其他 shell 确实具有允许这样做的功能。
例如,如果您可以使用 bash,则可以使用 PIPESTATUS
,正如此处已经建议的那样。如果你选择 Zsh,有一个类似的数组,名为 pipestatus
.
如果你想要 ksh
,你没有等效的功能,但是 是关于如何在 Korn Shell 中处理这个问题的讨论。
在我的shell脚本1中,有效。:
test1.sh
python main.py
if [[ $? -ne 0 ]]
then
exit
fi
test2.sh
python main.py 2>&1 | tee log.txt
if [[ $? -ne 0 ]]
then
exit
fi
脚本 2 失败。 python-call main
in test2.sh 的 return 代码怎么获取?
如果您在一行中使用多个命令,则需要使用 PIPESTATUS
为每个命令获取正确的 return 代码。
例如:
Python代码:
import sys
def exit_with_code():
sys.exit(5)
exit_with_code()
Shell 脚本:
python3 test.py 2>&1 | tee log.txt
echo "${PIPESTATUS[0]} ${PIPESTATUS[1]}"
输出:
5 0
表示Python
脚本的return代码为5,tee
脚本的return代码为0。
您可以在 if
之外进行重定向,同时避免反模式。
if ! python main.py; then
exit
fi 2>&1 | tee log.txt
(见
您为 POSIX Shell 标记了您的问题,AFIK,在 POSIX Shell 中无法实现此目的。但是,许多其他 shell 确实具有允许这样做的功能。
例如,如果您可以使用 bash,则可以使用 PIPESTATUS
,正如此处已经建议的那样。如果你选择 Zsh,有一个类似的数组,名为 pipestatus
.
如果你想要 ksh
,你没有等效的功能,但是