我需要一个脚本来关闭一些已经打开太久的程序。我无法将进程打开的时间(以秒为单位)保存到变量中。冲突的一行是:
SECONDS_OPENED=$(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }' ;
或下面看起来相似的那个。如果我把:
echo $(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }' ;
打印正确。我不知道为什么,在第一种情况下,我不知道为什么,SECONDS_OPENED
仍然是空的。
相关代码如下。如果我可以添加任何内容,请告诉我。
TIME_OPENED=$(ps -p $PID -o etime=) ;
SECONDS=$TIME_OPENED | awk -F: '{ print $3 }' ;
if [[ "$SECONDS" != "" ]] ;
then
SECONDS_OPENED=$(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }' ;
else
SECONDS_OPENED=$(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 60) + $2 }' ;
答案 0 :(得分:1)
你写的是:
SECONDS_OPENED=$(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }' ;
^____________________^ ^
this becomes orphan
这样命令就只是部分执行了。
要存储所有命令ps -p ... | awk '...'
,只需将所有内容包装在$()
表达式中:
SECONDS_OPENED=$(ps -p $pid -o etime= | awk -F: '{ print ... }')
^_______________________________________________^