如何计算执行时间并获取命令退出代码

问题描述 投票:0回答:2

我编写了一个 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
命令的退出代码吗?谢谢。

linux bash shell time sh
2个回答
1
投票

您在示例通话中的引用很不寻常。我希望这样

sh -c "ipython -c "%run ./foo.ipynb" > $(log_file "log_file_name") 2>&1"

翻译为

sh -c 'ipython -c %run' './foo.ipynb > somewhere/logs/log_file_name_somedate.log 2>&1'

至于

time
关于返回代码的行为,我的
bash
(5.1.16)的行为如下:

$ time ls "I do not exist" > $(echo newfile) 2>&1

real    0m0,004s
user    0m0,004s
sys     0m0,000s

$ echo $?
2

$ cat newfile
"I do not exist": No such file or directory (os error 2)

对于这样的重定向:

$ capture="$(time (ls "I do not exist" > $(echo newfile2) 2>&1) 2>&1)"

$ echo $?
2

$ echo "$capture"

real    0m0,004s
user    0m0,004s
sys     0m0,000s

$ cat newfile2
"I do not exist": No such file or directory (os error 2)

因此,我建议您尝试将通话更改为:

CODE_TIME="$(time (sh -c "ipython -c '%run ./foo.ipynb' > $(log_file "log_file_name") 2>&1") 2>&1)"

CODE_RESULT=$?

0
投票

或者一起避免

time

start=$(date +%s)
# run stuff, capture the return code
echo time $(( $(date +%s) - $start ))
© www.soinside.com 2019 - 2024. All rights reserved.