GNU/Linux >> Znalost Linux >  >> Linux

Použít Ts bez ztráty výstupní hodnoty?

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.

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


Linux
  1. Použít proměnné uvnitř rozšíření {} bez `eval`?

  2. Jak se dostanu z „obrazovky“ bez zadání „exit“?

  3. návratová hodnota z python skriptu do shell skriptu

  1. Povolit uživateli používat sudo bez hesla?

  2. Mohu použít příkaz (například strom), aniž bych jej instaloval v celém systému?

  3. Jak obnovit 70-persistent-net.rules bez restartu?

  1. Proč hlavní funkce bez příkazu return vrací hodnotu 12?

  2. Jak ukončíte program X11 bez chyby

  3. jak použít kill SIGUSR2 v bash?