shell 返回空白的Bash函数

7bsow1i6  于 2023-03-13  发布在  Shell
关注(0)|答案(1)|浏览(153)

我有下面的函数来计算执行命令的时间,单位为毫秒

function execute_command(){
  #Calculate the execution time for the command $1
  exec 3>&1 4>&2
  exec_time=$( { time $@ 1>&3 2>&4; } 2>&1 )
  exec 3>&- 4>&-
  RES=$(awk "BEGIN {printf \"%d\",${exec_time}*1000}")
  echo $RES
}
remove_java7_latency=$(execute_command "yum -y remove java7" | tail -n 1)
echo "remove_java7_latency=${remove_java7_latency}" >> /tmp/sampleoutput

但是当我检查sampleoutput时,它显示为

remove_java7_latency=

如果我将函数中的RES重定向到相同的文件

echo "RES=${RES}" >> /tmp/sampleoutput

作为RES=1630.00,它是正常的
有人能帮助我理解为什么它不能用于返回值吗?在这种情况下返回值的正确方式是什么?我不倾向于使用bc实用程序,因为底层示例默认情况下没有安装它。

wztqucjr

wztqucjr1#

exec_time实际上产生了多行输出。解决方法是

exec_time=$( { time $@ 1>&3 2>&4; } 2>&1 )

exec_time=$( { time $@ 1>&3 2>&4; } 2>&1 | tail -n 1)

相关问题