GNU/Linux >> Linux の 問題 >  >> Linux

カットする配管出力

最初の行:

echo $(ps | grep $PPID) | cut -d" " -f4

言います:

  • ps | grep $PPID を実行 サブシェル内
  • 出力を返します - これは次のようになります:

    3559 pts/1 00:00:00 bash
    

    次に、その出力を echo の最初のパラメーターとして使用します。実際には、出力を単にエコーすることを意味します

  • 次に cut -d" " -f4 を実行します その上で - この場合、コマンド名が得られます

2 番目のコマンド:

echo ps | grep $PPID | cut -d" " -f4

言います:

  • エコー文字列 ps
  • $PPID の文字列を grep - $PPID のように、これは何も返しません。 数字が含まれているため、ps になることはありません .したがって、grep は何も返しません
  • cut -d" " -f4 を実行 前のコマンドの入力で - これは何もないので、何も得られません

その理由は

echo ps

文字列 ps を出力するだけです;プログラム ps を実行しません .コマンドの修正版は次のようになります:

ps | grep $PPID | cut -d" " -f4

追加のために編集: paxdiablo は ps | grep $PPID を指摘しています echo $(ps | grep $PPID) で折りたたまれる多くの空白が含まれています ( $(...) の結果から 、二重引用符で囲まれていない場合は、空白で別々の引数に分割され、次に echo スペースで区切られたすべての引数を出力します)。これに対処するには、 tr を使用できます 繰り返されるスペースを「絞る」:

ps | grep $PPID | tr -s ' ' | cut -d' ' -f5

または、最初からしなければならなかったことに固執することもできます。 :-)


Linux
  1. Du出力をサイズで並べ替える方法は?

  2. ループ出力のパイピングはローカル変数の変更を防ぎますか?

  3. Cut / Grep And Df -h?

  1. 出力を列で並べ替えますか?

  2. Linux での cut コマンドの例

  3. 切り取り:コマンドが見つかりません

  1. ファイルの 2 列目を出力する

  2. 出力を文字列に変換する

  3. ps aux 出力の意味