2013-07-19 13 views
11

C'è qualche opzione simile in dash shell corrispondente a pipefail in bash?equivalente di pipefail in dash shell

O qualsiasi altro modo di ottenere uno stato diverso da zero se uno dei comandi in pipe fallisce (ma non si esce da esso quale set -e dovrebbe).

per renderlo più chiaro, ecco un esempio di ciò che voglio ottenere:

In un debug makefile di esempio, la mia regola è simile al seguente:

set -o pipefail; gcc -Wall $$f.c -o $$f 2>&1 | tee err; if [ $$? -ne 0 ]; then vim -o $$f.c err; ./$$f; fi; 

pratica le cose vanno apre il file di errore e file sorgente su errore ed esegue i programmi quando non ci sono errori. Mi fa risparmiare un po 'di battitura. Abor snippet funziona bene su bash, ma il mio sistema Ubunty più recente utilizza dash che non sembra supportare l'opzione pipefail.

Io fondamentalmente voglio uno stato di errore se la prima parte del gruppo al di sotto di comandi venga meno

gcc -Wall $$f.c -o $$f 2>&1 | tee err 

in modo che posso usare quello per l'istruzione IF.

Esistono modi alternativi per raggiungerlo?

Grazie!

+1

Perché non solo sbarazzarsi del 'tee'? 'se gcc -Wall $$ f.c -o $$ f> $$ f.log 2> & 1; quindi cat $$ f.log; ./$$f; else vim -o $$ f.c $$ f.log; fi' (In alternativa, installa 'bash' su Ubunty. È solo un apt-get away.) – rici

+0

@rici Grazie! Stavo usando il tee perché volevo anche che l'output di stderr venisse stampato sullo schermo, principalmente per vedere se c'erano degli avvertimenti. Ma se non c'è altro modo, probabilmente passerò a ciò che hai suggerito. Informazioni sull'installazione di bash: avevo assunto (senza alcuna ricerca) che il cruscotto fosse un passo in avanti da bash quindi non volevo tornare indietro ma ora googling un po 'su di esso sembra che potrebbe non essere necessariamente così. Leggerò un po 'di più sulle differenze e poi deciderò. Grazie ancora per entrambi i tuoi suggerimenti! – Lavya

+1

Speravo che il set -e menzionato sopra mi fornisse un trattino equivalente a set -o pipefail ma non così: '$ dash -c 'set -e; falso | gatto'; echo $? $ ' –

risposta

6

Il "magazzino" risposta per POSIX implementazioni di PIPESTATUS/pipefail è nel comp.unix.shell FAQ Q11

+3

Questo non risponde alla domanda. Questo documento descrive come inserire il codice di uscita dei comandi convogliati in variabili separate. Ma questo è abbastanza lontano dalla domanda in questione, che vuole che la shell esca automaticamente non appena un comando di pipe fallisce. "RTFM" è valido solo se "FM" risponde effettivamente alla domanda. – vog