我正在尝试编写一个Bash别名(或脚本),列出当前正在运行的某些特定程序。
在我的.bashrc
我已将$MY_BIN_PATH
设置为包含我感兴趣的所有程序的目录:
export MY_BIN_PATH=/root/repo/bin
$ > echo $MY_BIN_PATH
/根/回购/ bin中
列出该目录显示了许多文件。我希望grep
为ps -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 -ef
和grep $i
之间的管道中{{1}}的值被“遗忘”一样。
我在这里做错了什么,我怎样才能让它发挥作用?
答案 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()。
你到底想要用循环来实现什么?