“/ bin / grep:在bash循环中不匹配[或[^”

时间:2013-06-03 13:33:37

标签: bash

我正在尝试编写一个Bash别名(或脚本),列出当前正在运行的某些特定程序。

在我的.bashrc我已将$MY_BIN_PATH设置为包含我感兴趣的所有程序的目录:

export MY_BIN_PATH=/root/repo/bin
$ > echo $MY_BIN_PATH
  

/根/回购/ bin中

列出该目录显示了许多文件。我希望grepps -ef输出for i in `ls $MY_BIN_PATH`; do ps -ef | grep $i | egrep -v "grep|md_m|avahi"; done

$MY_BIN_PATH

无论/bin/grep: Unmatched [ or [^ /bin/grep: Unmatched [ or [^ /bin/grep: Unmatched [ or [^ /bin/grep: Unmatched [ or [^ /bin/grep: Unmatched [ or [^ 中的哪个(如果有)文件正在运行,输出始终为:

$i

似乎就像ps -efgrep $i之间的管道中{{1}}的值被“遗忘”一样。

我在这里做错了什么,我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:5)

首先,检查ls是否有别名。也许你应该使用ls的绝对路径而没有任何选项。确保它不是系统别名的颜色或其他东西。

其次,您可以将循环标题更改为

for i in $MY_BIN_PATH/*

这也可以解决它。

答案 1 :(得分:5)

首先,never parse the output of ls

其次,需要正确引用参数

试试这个:

for i in $MY_BIN_PATH/*
do
  ps -ef | grep "$i" | egrep -v "grep|md_m|avahi"
done

要在知道进程名称时获取正在运行的进程的PID,请使用pidof()

你到底想要用循环来实现什么?