我想向我的.bash_profile
添加一个命令,以运行一个脚本(如果尚未运行)。以下是我的尝试。
if ps ax | grep reminder.py | grep -v grep;
echo 'i want to get rid of this line'
then
python /Users/Jesse/Dropbox/reminder/reminder.py &
fi
我不知道反转if语句的语法。
我尝试了很多类似的东西:
if ! ps ax | grep reminder.py | grep -v grep
then
python /Users/Jesse/Dropbox/reminder/reminder.py &
fi
我的尝试都没有成功。
如果相关,我正在macOS上运行。
答案 0 :(得分:3)
在bash中,server.js
表示取反。因此,无需进行任何其他更改,您可以使用:
!
但是您可能想消除grep输出,因此请使用if ! ps ax | grep reminder.py | grep -v grep
then
python /Users/Jesse/Dropbox/reminder/reminder.py &
fi
保持安静:
-q
如果我们更聪明地使用grep的正则表达式,则可以简化管道(提示:Gordon Davisson):
if ! ps ax | grep reminder.py | grep -q -v grep
then
python /Users/Jesse/Dropbox/reminder/reminder.py &
fi
以上方法之所以有效,是因为if ! ps ax | grep -q "reminder[.]py"
then
python /Users/Jesse/Dropbox/reminder/reminder.py &
fi
不能匹配reminder[.]py
,但不能匹配reminder[.]py
。您可以在命令行上对此进行测试:
reminder.py
如您所见,只有上面的第二个命令显示匹配项。
另外,如果$ echo 'reminder[.]py' | grep 'reminder[.]py'
$ echo 'reminder.py' | grep 'reminder[.]py'
reminder.py
在您的系统上可用,则不需要管道:
pgrep
对于那些喜欢一种衬垫的人,以上简化为:
if ! pgrep -f reminder.py >/dev/null
then
python /Users/Jesse/Dropbox/reminder/reminder.py &
fi
上面的pgrep -f reminder.py >/dev/null || python /Users/Jesse/Dropbox/reminder/reminder.py &
是逻辑或。只有在||
之后的命令失败(退出非零返回码)的情况下,该命令才会执行。