我知道已经有人问过类似的问题,但我还没有找到一个足够接近我的情况的问题......
我需要在 bash 脚本中对命令进行计时,类似于:
mytime="$(time ( ls ) 2>&1 1>null)"
rm null
这很好用。但是当我尝试ls
用更复杂的东西替换时,我遇到了问题:
command="$reg 1d_euler_2nd.rg -nc $nc -ll:cpu $np -ns $nstop"
mytime="$(time ( $command ) 2>&1 1>null)"
rm null
其中reg
是环境变量,nc
、np
、 和nstop
都在我的脚本中定义。当我尝试使用此代码时出现以下错误:
(standard_in) 1: syntax error
(standard_in) 1: illegal character: :
(standard_in) 1: illegal character: :
(standard_in) 1: illegal character: $
(standard_in) 1: syntax error
(standard_in) 1: illegal character: :
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: illegal character: :
任何帮助将不胜感激!
我很抱歉——当我试图创建一个最小的工作示例时,我意识到问题出在我的代码中的其他地方。
答案1
我可以time
使用子 shell 单独捕获输出没有使用变量来抽象命令。为了简洁起见,一个简单的例子:
$ time ( echo "Hello" > example.out 2> example.err ) > time.out 2> time.err
$ ls *{out,err}
example.err example.out time.err time.out
$ cat time.err
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ cat example.out
hello