Mi piacerebbe avere lo stdout di un comando replicato anche su stderr sotto bash. Qualcosa di simile:Duplicare lo stdout allo stderr
$ echo "FooBar" (...)
FooBar
FooBar
$
dove (...) è l'espressione di reindirizzamento. È possibile?
Mi piacerebbe avere lo stdout di un comando replicato anche su stderr sotto bash. Qualcosa di simile:Duplicare lo stdout allo stderr
$ echo "FooBar" (...)
FooBar
FooBar
$
dove (...) è l'espressione di reindirizzamento. È possibile?
Usa tee con/dev/stderr:
echo "FooBar" | tee /dev/stderr
o utilizzare awk/Perl/Python per fare manualmente la replica:
echo "FooBar" | awk '{print;print > "/dev/stderr"}'
echo "FooBar" | perl -pe "print STDERR, $_;"
virgola non necessaria dopo STDERR nell'esempio perl – Znik
che è più portabile tra i sistemi operativi e tra le shell? 'tee/dev/stderr' o' tee> (cat> & 2) '? –
Scommetto che quest'ultimo è più compatibile multipiattaforma visto che '/ dev/stderr' non è disponibile su ogni distribuzione. – Qix
Per il reindirizzamento a stderr, vorrei utilizzare >&2
o >/dev/stderr
. Per replicare l'output, vorrei usare tee
. Lo svantaggio di questo è che un file temporaneo è necessario:
echo "FooBar" | tee /tmp/stdout >&2 ; cat /tmp/stdout
errato. hai la possibilità di ottenere un grande flusso e riempire completamente il dispositivo/tmp, solitamente connesso al filesystem/root. – Znik
@Znik - '/ tmp/stdout' è solo un esempio. Sentiti libero di sostituire quel nome di file con quello che è più appropriato nel tuo contesto. – mouviciel
Usa processo di sostituzione: http://tldp.org/LDP/abs/html/process-sub.html
echo "FooBar" | tee >(cat >&2)
Tee accetta un nome file come parametro e duplica l'output in questo file. Con la sostituzione del processo è possibile utilizzare un processo anziché il nome file >(cat)
ed è possibile reindirizzare l'output da questo processo allo stderr >(cat >&2)
.
Questa è una buona soluzione per sistemi operativi come OS X, che non ha il file system/proc. – Meow
echo "FooBar" |tee /dev/stderr
tee: /dev/stderr: Permission denied
che non funziona con RedHat 6,3
echo "FooBar" | (read A ; echo $A ; echo $A >&2)
sta lavorando
scusa, aggiunta aggiunta ;-) – defdefred
Sede [Come posso inviare stdout di comandi multipli?] (Http://unix.stackexchange.com/questions/28503/how-can-i-send-stdout-to-multiple-commands) –