První řádek:
echo $(ps | grep $PPID) | cut -d" " -f4
říká:
- Spustit
ps | grep $PPIDv podskořápce -
Vraťte výstup – který bude vypadat nějak takto:
3559 pts/1 00:00:00 basha poté použijte tento výstup jako první parametr echo - což v praxi znamená pouze echo výstupu
- Potom spusťte
cut -d" " -f4na 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$PPIDobsahuje číslo, takže nikdy nebudeps. Proto grep nic nevrací - Spustit
cut -d" " -f4se 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. :-)