ps 辅助 | grep 在 .bash_history 文件中搜索

ps aux | grep searches in .bash_history file

我的机器上安装了 Debian8 (Jessie) 运行ning。

我运行

$ 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/search 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 应该搜索标准输入(通过传递 -作为文件名,并使用 -e 将后面的十六进制字符串标记为明确表示要搜索的目标):

ps aux | command grep -e '[c]13dc8623fe6abc' -