例如我想执行:
ps x | grep something | grep -v grep | somecommand
我想somecommand
仅在有程序运行时才执行。该怎么做?
答案1
您可以使用if
。此外,要对命令进行 grep,但要排除 grep 本身,您可以使用以下技巧:
if ps x | grep '[s]omething' ; then
echo Running.
else
echo Not running.
fi
答案2
这很简单:
pgrep something && somecommand
pgrep
类似于ps | grep something | grep -v grep
,更简洁,但控制输出的选项更少。但是,您不必担心会偶然过滤掉实际需要的内容(例如,pgrep agreppina
可以工作,但ps x | grep agreppina | grep -v grep
实际上不会)。
command1 && command2
有点像编程语言中的任何连接词,仅当第一个命令成功时(实际上,如果它返回状态为零),才会执行 command2。
答案3
这是解决方案
ps x | grep something | [[-n $(grep -v grep) ]] && somecommand
- -n将检查字符串是否无效的或不
- &&是和操作员