我有一个 bash 脚本,尝试使用参数调用 pgrep(过度简化):
PATTERN="'/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$'"
pgrep -f $PATTERN
echo pgrep -f $PATTERN
给出以下输出:
Usage: pgrep [-cflvx] [-d DELIM] [-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]
[-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] [PATTERN]
pgrep -f '/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf$'
我想这意味着参数没有传递给 pgrep,而是由于某种原因传递给了 echo。
我的期望:
7632
pgrep -f '/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf$'
当我单独运行 preg 行时,它按预期输出 7632。
我在这里做错了什么吗?我尝试过 sh、dash 和 bash。同样的结果,我真的没有看到问题。
最佳答案
您需要将 PATTERN 用双引号引起来:
PATTERN="/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$"
pgrep -f "$PATTERN"
编辑:并且为了回显我会这样做:
echo pgrep -f \'$PATTERN\'
关于bash 脚本/pgrep 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364676/