Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将shell语句转换为或_Bash_Shell - Fatal编程技术网

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"


注意,这将适用于GNU
grep
,但是根据POSIX,您应该使用
-E
选项来启用扩展正则表达式。这并不是一个具体的PCRE;这只是一个扩展正则表达式。ubuntu使用的是
GNU
还是
POSIX
?Mac
OSX怎么样?Ubuntu使用GNU
grep
;MacOSX使用BSD
grep
@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"