Bash 将shell语句转换为或
如何使用正确的语法执行以下Bash 将shell语句转换为或,bash,shell,Bash,Shell,如何使用正确的语法执行以下或语句: if ps aux | (grep "[i]ngest_all.py" OR grep "[h]ello.py" ) > /dev/null then echo "Script is already running. Skipping" else exec "$DIR/ingest_all.py" fi 您可以使用awk: if ps aux | awk '/[i]ngest_all.py/||/[h]ello.py/{exit 0}E
或语句:
if ps aux | (grep "[i]ngest_all.py" OR grep "[h]ello.py" ) > /dev/null
then
echo "Script is already running. Skipping"
else
exec "$DIR/ingest_all.py"
fi
您可以使用awk
:
if ps aux | awk '/[i]ngest_all.py/||/[h]ello.py/{exit 0}END{exit 1}'
您可以使用交流发电机(管道字符:|)指定grep正则表达式的内部或
对于BSD grep,使用基本正则表达式(至少在OS X上)时,使用转义管道:\\124;
:
grep "[i]ngest_all.py\|[h]ello.py"
如果需要,还可以使用扩展正则表达式,其中不需要转义管道字符:
grep -E "[i]ngest_all.py|[h]ello.py"
或
注意,这将适用于GNUgrep
,但是根据POSIX,您应该使用-E
选项来启用扩展正则表达式。这并不是一个具体的PCRE;这只是一个扩展正则表达式。ubuntu使用的是GNU
还是POSIX
?MacOSX怎么样?Ubuntu使用GNUgrep
;MacOSX使用BSDgrep
@David542,POSIX不是命令,GNU也不是;它们都不需要突出显示代码。在OSX上的BSD grep中,默认值是基本正则表达式(BRE),在这里进行替换时使用转义管道。如果使用扩展正则表达式(ERE),则不使用转义符,而使用管道。为什么文件名的第一个字符周围有方括号?名称中是否有方括号,或者您正在使用正则表达式字符类?它是一个正则表达式,因此grep
本身不会作为ps aux
中的命令之一返回。啊,真是妙招!如果您正在使用OS X或有权访问pgrep
,则以下操作可能对您很有效:pgrep-q aux inset\u all.py hello.py
。(pgrep
忽略自身)并注意,如果您不想输出,大多数grep(all?)都会将-q
设置为安静,并避免重定向到/dev/null
egrep "[i]ngest_all.py|[h]ello.py"