Ich habe alle Arten von Möglichkeiten ausprobiert, sowohl umzuleiten stdout
als stderr
auch /dev/null
ohne Erfolg. Ich habe fast mein ganzes Leben lang Bash laufen lassen, mit dem ich dieses Problem noch nie hatte, aber ausnahmsweise bin ich bei BSD festgefahren /bin/sh
.
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 python.tgz
jedoch vorhanden, wird eine Zeile ausgegeben, die wie folgt 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.
quelle
/bin/sh
die&>/dev/null
Syntax implementiert haben , anscheinend nicht oder ich habe eine ältere Version (die ich in keiner Weise wiedergeben kann und OpenBSD 5.3sh
basiert auf pdksh. Es gibt heutzutage keine Bourne-Shell mehr.csh
eingeführt>&
auch erhältlich inzsh
.bash
wählte&>
(jetzt auch vonzsh
und einigenpdksh
Derivaten unterstützt), obwohl es eindeutig die POSIX-Konformität bricht, dafoo &> file
es sich um eine vollkommen gültige POSIX-Syntax handelt, die etwas völlig anderes bedeutet.foo &> file
ist wiefoo & > file
oderfoo & : > file
, das wird im Hintergrund ausgeführt und die Datei zum Schreiben ohne Befehl geöffnet (wird wahrscheinlich nicht so verwendet).>&
ist nicht ideal , entweder , wie es in Konflikt mit den>&2
,>&-
Betreibern.zsh
fügte es der Bequemlichkeit halber für csh-Benutzer hinzu (csh hat es nicht>&2
). Es handelt sich nur um syntaktischen Zucker, nur um> file 2>&1
handelsüblichen und tragbaren Zucker (für Bourne-ähnliche Muscheln).