我有 Debian8 (Jessie) 在我的 mcahine 上运行。
我跑
$ ps aux | grep '[c]13dc8623fe6abc'
我得到以下结果
.bash_history:java -jar slave.jar -jnlpUrl http://tomcat-server:8080/slave-agent.jnlp -s c13dc8623fe6abc
.bash_history:java -jar slave.jar -jnlpUrl http://tomcat-server:8080/slave-agent.jnlp -s c13dc8623fe6abc
Script/build.sh:java -jar slave.jar -jnlpUrl http://tomcat-server:8080/slave-agent.jnlp -s c13dc8623fe6abc
返回的结果是来自我系统上的 bash 脚本文件的搜索结果。这根本不是我所期望的。我希望它能够 grep/搜索ps aux
的输出.
为什么我的系统中会发生这种奇怪的行为。?
根据下面的建议,我做了以下工作
$ type ps
输出
::6+type ps
ps is /bin/ps
$ type grep
输出
::7+type grep
grep is aliased to `grep --color=auto -I -r --exclude=*.{c.svn-base,o,.py,so*,a}'
设置后
$ PS4=':$BASH_SOURCE:$LINENO+'
$ set -x
之后如果我这样做
$ ps aux | grep '[c]13dc8623fe6abc'
我得到以下输出。
::5+grep --color=auto -I -r '--exclude=*.c.svn-base' '--exclude=*.o' '--exclude=*..py' '--exclude=*.so*' '--exclude=*.a' '[c]13dc8623fe6abc'
::5+ps aux
.bash_history:java -jar slave.jar -jnlpUrl http://tomcat-server:8080/slave-agent.jnlp -s c13dc8623fe6abc
.bash_history:java -jar slave.jar -jnlpUrl http://tomcat-server:8080/slave-agent.jnlp -s c13dc8623fe6abc
Script/build.sh:java -jar slave.jar -jnlpUrl http://tomcat-server:8080/slave-agent.jnlp -s c13dc8623fe6abc
在评论中确定的那样,在启用set -x
的情况下运行它表明别名为您的grep
调用增加了一堆额外的复杂性。
为了使它尽可能健壮,让我们既防止别名执行(通过使用command
内置),又明确指定您的 grep 应该搜索 stdin(通过将 -
作为文件名传递,并使用 -e
标记后面的十六进制字符串明确表示要搜索的目标):
ps aux | command grep -e '[c]13dc8623fe6abc' -