【发布时间】:2022-02-16 17:54:17
【问题描述】:
我编写了一个 shell 脚本,我想获得一个命令的执行时间,但我也将命令的输出重定向到一个文件。另外,我需要获取此特定命令的退出代码才能在 if 语句中使用它。这是我尝试过的:
...
TIMEFORMAT=%R
log_file() {
echo "$PROJECT_DIR/logs/$1_$(date +%Y%m%d_%H%M%S).log"
}
CODE_TIME=$(time sh -c "ipython -c "%run ./foo.ipynb" > $(log_file "log_file_name") 2>&1")
CODE_RESULT=$?
echo "Code_Result: $CODE_RESULT"
if [ "$CODE_RESULT" -eq 0 ]
...
根据time 的文档,它返回命令的退出代码,但我也在函数中执行echo 命令。那么,任何人都知道如何获得ipython 命令的退出代码?谢谢。
【问题讨论】:
-
您在计时中寻找什么样的精度......最近的分钟?最近的秒?最接近的毫秒?如果“最近的第二个”就足够了,那么考虑访问 bash 的
$SECONDS变量,简单的比如:start=$SECONDS; run-command; CODE_RESULT=$?; end=$SECONDS; duration=$((end-start)) -
或
SECONDS=0; run-command; CODE_RESULT=$?; echo $SECONDS。 -
@markp-fuso @Cyrus 我想在几秒钟内得到,但我正在使用 ShellCheck,它会警告我
$SECONDS变量。所以,我搜索了一个替代方案,TIMEFORMAT=%R为我工作以获得秒数。