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 ).