带有空白/空 grep 的语句是不是返回?
Posted
技术标签:
【中文标题】带有空白/空 grep 的语句是不是返回?【英文标题】:While Do Statement with blank/empty grep return?带有空白/空 grep 的语句是否返回? 【发布时间】:2011-12-16 21:29:23 【问题描述】:这是我的 foobar.sh 的代码:
!#/bin/bash
while [ 1 ]
do
pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' print $2'`
echo $pid
if [ "$pid"="" ]
then
echo "Process has ended lets get this show on the road..."
exit
else
echo "Process has not ended yet"
fi
sleep 6
done
我基本上是在运行一个无限循环,一旦受监控的进程结束,它将执行命令 X,但我最终在脚本循环时收到以下消息:
./foobar.sh: line 7: [: missing `]'
Process has not ended yet
有没有办法让脚本接受零反馈将触发我的“Then”语句并执行命令 X,因为它不喜欢当前的方法。
【问题讨论】:
【参考方案1】:代替
if [ "$pid"="" ]
请尝试
if [ "$pid" = "" ]
=
周围的空格很重要。
你也可以试试
if [ -z "$pid" ]
【讨论】:
【参考方案2】:我愿意
while pgrep -fl "mylittleprogram"; do sleep 6; done
exit # process has ended
(pgrep 在包psmisc
IIRC)
我刚刚测试过了。如果您希望等待保持沉默,您可以将pgrep
的输出重定向到/dev/null
。添加更多香料以使事情不间断:
trap "" INT
while pgrep -fl "mylittleprogram" >/dev/null
do
sleep 6
done
true
&& exit
【讨论】:
【参考方案3】:零测试是if [ -z "$pid" ]
【讨论】:
【参考方案4】:而不是由以下提供的模糊匹配:
pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' print $2'`
...以及古老的反引号语法,请考虑与进程基本名称完全匹配并生成您选择的输出格式(此处为进程 pid,如果存在):
pid=$(ps -C mylittleprogram -opid=)
然后,如上所述,只需测试一个空值:
[ -z "$pid" ] && echo "no process" || echo "I live as $pid"
输出元素名称后面的等号会隐藏您通常会得到的标题。联机帮助页是您的朋友。
【讨论】:
以上是关于带有空白/空 grep 的语句是不是返回?的主要内容,如果未能解决你的问题,请参考以下文章