Tato otázka zde již obsahuje odpovědi :Získejte stav ukončení procesu, který je přesměrován do jiného
(16 odpovědí)
Uzavřeno minulý rok.
Linux
(16 odpovědí)
Uzavřeno minulý rok.
Mám sestavovací skript, který provádí dlouhý příkaz, který produkuje spoustu výstupu, který vypadal takto:
./compile
Abych mohl řešit problémy s výkonem kompilace, chci použít ts
(od moreutils), který předponuje každému výstupnímu řádku časové razítko. Takže jsem aktualizoval svůj skript takto:
bash -c "./compile | ts '[%Y-%m-%d %H:%M:%S]'"
To funguje, ale nyní je výstupní hodnota vždy , událost při
compile
selže (myslím, protože ts
ukončí se bez chyby).
Jak mohu aktualizovat svůj skript, aby vrátil compile
při použití ts
?
Přijatá odpověď:
Protože používáte Bash, můžete použít jeho $PIPESTATUS
což je pole obsahující různé výstupní kódy z příkazů v kanálu:
bash -c './compile | ts "[%Y-%m-%d %H:%M:%S]"; exit "${PIPESTATUS[0]}"'
zsh
má podobnou funkci, ale používá $pipestatus
místo toho pole (pamatujte také na zsh
pole jsou číslována od 1
, nikoli ).