it-swarm.com.de

Leiten Sie sowohl stderr als auch stdout mit / bin / sh nach / dev / null um

Ich habe alle möglichen Möglichkeiten ausprobiert, um sowohl stdout als auch stderr ohne Erfolg nach /dev/null Umzuleiten. Ich habe fast mein ganzes Leben lang Bash gespielt, mit dem ich dieses Problem noch nie hatte, aber einmal in BSD bin ich bei /bin/sh Festgefahren.

Was ich versucht habe:

if ls ./python* 2> /dev/null; then
    echo found Python
fi

... was funktioniert; Wenn Python nicht vorhanden ist, werden die Fehlermeldungen von ls stummgeschaltet. Wenn jedoch python.tgz vorhanden ist, wird eine Zeile ausgegeben, die folgendermaßen aussieht:

# ./test.sh
./python-2.7.3p1.tgz

Ich habe es versucht:

if ls ./python* &> /dev/null; then
    echo found Python
fi

und

if ls ./python* 2>1 > /dev/null; then
    echo found Python
fi

und

if ls ./python* > /dev/null; then
    echo found Python
fi

Nichts funktioniert wirklich. Ich kann nur einen der Ausgänge umleiten, nicht beide gleichzeitig.

65
Torxed

Dies funktioniert in jeder Posix-kompatiblen Shell:

ls good bad >/dev/null 2>&1

Sie müssen stdout umleiten zuerst, bevor Sie es in stderr duplizieren ; Wenn Sie es zuerst duplizieren, zeigt stderr nur auf das, worauf stdout ursprünglich gezeigt hat.

Bash , zsh und einige andere Shells stellen ebenfalls die Verknüpfung bereit

ls good bad &>/dev/null

dies ist praktisch in der Befehlszeile, sollte jedoch in Skripten vermieden werden, die portabel sein sollen.

110
rici