0

現在実行中の特定のプログラムを一覧表示する Bash エイリアス (またはスクリプト) を作成しようとしています。

私の場合、関心のあるすべてのプログラムを含むディレクトリ.bashrcに設定しました。$MY_BIN_PATH

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

/ルート/レポ/ビン

そのディレクトリを一覧表示すると、多数のファイルが表示されます。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 [^

との間のパイプでの値が「忘れられた」ようです。$ips -efgrep $i

ここで何が間違っているのですか?どうすれば機能させることができますか?

4

2 に答える 2

5

まず、lsが何かにエイリアスされているかどうかを確認します。おそらくls、オプションなしで絶対パスを使用する必要があります。color-ls などにシステムエイリアスされていないことを確認してください。

次に、ループ ヘッダーを次のように変更できます。

for i in $MY_BIN_PATH/*

それもそれを修正するかもしれません。

于 2013-06-03T13:39:24.457 に答える
5

まず、ls の出力を解析しないでください。

次に、パラメータを適切に引用する必要があります

これを試して:

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

プロセス名がわかっている場合に実行中のプロセスの PID を取得するには、pidof()を使用します。

最後にループで何を達成しようとしていますか?

于 2013-06-03T13:39:46.257 に答える