「for」とgrep / egrepを使用したスクリプト

「for」とgrep / egrepを使用したスクリプト

私はLinuxについてもっと学びようとしていますが、経験上最善の方法は壁に頭を当てることです。今、私は手動で何度も作業を行ったので、自動化したいと思います。これには、再起動できるように一部のタスクを終了するオネライナの作成が含まれます。

現在私は次のことをしています:

for i in `ps aux | egrep "[c]ouchpotato|[s]abnzbd|[s]ickbeard|[d]eluge|[n]zbhydra"|awk '{print $2, $11, $12}'`; do echo $i; done

問題は、forループを実行すると、awkから取得した行が破壊されることです。

ランニングは ps aux | egrep "[c]ouchpotato|[s]abnzbd|[s]ickbeard|[d]eluge|[n]zbhydra"|awk '{print $2, $11, $12}' 私が探している結果を提供します。

27491 /usr/local/couchpotatoserver-custom/env/bin/python /usr/local/couchpotatoserver-custom/var/CouchPotatoServer/CouchPotato.py
27504 /usr/local/deluge/env/bin/python /usr/local/deluge/env/bin/deluged
27525 /usr/local/deluge/env/bin/python /usr/local/deluge/env/bin/deluge-web
27637 /usr/local/nzbhydra/env/bin/python /usr/local/nzbhydra/share/nzbhydra/nzbhydra.py
27671 /usr/local/sabnzbd/env/bin/python /usr/local/sabnzbd/share/SABnzbd    /SABnzbd.py
28084 /usr/local/sickbeard-custom/env/bin/python /usr/local/sickbeard-custom/var/SickBeard/SickBeard.py

ただし、forループに追加すると、次のように分類されます。

27491
/usr/local/couchpotatoserver-custom/env/bin/python
/usr/local/couchpotatoserver-custom/var/CouchPotatoServer/CouchPotato.py
27504
/usr/local/deluge/env/bin/python
/usr/local/deluge/env/bin/deluged
etc...

私の目標は、$ iに行全体を含めることです。これは可能ですか?また、$ 11と$ 12でのみgetコマンドを使用できますか? Pythonやアプリケーションへのフルパスは必要ありません。

ありがとうございます!

ベストアンサー1

ループ出力は、for単語の境界(スペースや改行など)で分割されます。そしてあなたが欲しいと言ったのは$i

したがって、次の 2 つのタスクを実行する必要があります。

  1. 入力フィールド区切り文字を改行に設定します。
  2. ワイルドカード拡張を無効にします。

    set -f;IFS=$'\n'; for i in `.....`;do echo "$i"; done
    

注:逆引用符を引用しないでください。そうでなければ、ループにfor複数の引数を提供することになり、全体のpsの出力になり、何の役にも立たなくなります。

ファタイ

おすすめ記事