GNU/Linux >> Znalost Linux >  >> Linux

Výstup potrubí k řezání

První řádek:

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

říká:

  • Spustit ps | grep $PPID v podskořápce
  • Vraťte výstup – který bude vypadat nějak takto:

    3559 pts/1 00:00:00 bash
    

    a poté použijte tento výstup jako první parametr echo - což v praxi znamená pouze echo výstupu

  • Potom spusťte cut -d" " -f4 na tom - což vám v tomto případě poskytne název příkazu

Druhý příkaz:

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

říká:

  • Řetězec ozvěny ps
  • Uchopte tento řetězec pro $PPID - toto nikdy nic nevrátí, jako $PPID obsahuje číslo, takže nikdy nebude ps . Proto grep nic nevrací
  • Spustit cut -d" " -f4 se vstupem předchozího příkazu - což je nic, takže nedostanete nic

Důvodem je, že

echo ps

pouze vytiskne řetězec ps; nespustí program ps . Opravená verze vašeho příkazu by byla:

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

Upraveno za účelem přidání: paxdiablo poukazuje na to, že ps | grep $PPID obsahuje mnoho mezer, které se sbalí o echo $(ps | grep $PPID) (od výsledku $(...) , pokud není ve dvojitých uvozovkách, je rozdělen mezerami na samostatné argumenty a poté echo vypíše všechny své argumenty oddělené mezerami). K vyřešení tohoto problému můžete použít tr pro "zmáčknutí" opakovaných mezer:

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

nebo můžete zůstat u toho, s čím jste museli začít. :-)


Linux
  1. Řez / Grep A Df -h?

  2. Příklady příkazů cut v Linuxu

  3. cut:příkaz nenalezen

  1. výstup 2. sloupce souboru

  2. Převeďte výstup ls na csv

  3. význam výstupu ps aux

  1. Jak seřadit výstup Du podle velikosti?

  2. Linux – výstup Ps Lstart změněn?

  3. Potrubí pro výstup smyčky brání místním proměnným modifikacím?