Ausgabe kann in FreeBsd nicht umgeleitet werden

Ausgabe kann in FreeBsd nicht umgeleitet werden

Auf einem Freebsd-System führe ich mein Bash-Skript aus und versuche, die Ausgabe umzuleiten:

% sudo bash some_file.sh arg1 >/dev/null  2>&1
Ambiguous output redirect.


% sudo bash some_file.sh arg1 &> /dev/null
Invalid null command.

Antwort1

Sieht so aus, als ob Sie csh in Ihrer Befehlszeile verwenden (überprüfen Sie dies mit echo $SHELL).

  • Verwenden Sie entweder die CSH-Syntax zum Umleiten von stdout und stderr:sudo bash some_file.sh arg1 >& /dev/null
  • Oder verschieben Sie die Umleitung in den "Bash-Teil" des Befehls mitsudo bash -c 'some_file.sh arg1 >/dev/null 2>&1'

Antwort2

Sie sind nah dran gekommen, aber keine davon ist die richtige Syntax für die TENEX C-Shell.

Denken Sie daran: Die interaktive Login-Shell, die Sie unter FreeBSD verwenden, ist, sofern Sie sie nicht geändert haben, die TENEX C-Shell. Ihre Umleitung des sudoBefehls muss die Umleitungssyntax der TENEX C-Shell verwenden. Es spielt keine Rolle, dass Sie die Bourne Again-Shell über ausführen sudo. Das wird nur bestimmtnachdem die Umleitung stattgefunden hat und sudobereits ausgeführt wurde.

Das:

% sudo bash eine_datei.sh arg1 >/dev/null 2>&1
ist praktisch dasselbe wie

% >/dev/null >&1 sudo bash eine_datei.sh arg1 2
das versucht, die Standardausgabe zweimal an zwei verschiedene Orte umzuleiten.

Das:

% sudo bash eine_datei.sh arg1 &> /dev/null
ist eigentlich

% sudo bash eine_datei.sh arg1 & > /dev/null
und wird als solches in Ihren Befehlsverlauf umgeschrieben. Es sind zwei Befehle, die durch verbunden sind &, sudound ein Befehl ohne Namen oder Argumente. Letzteres ist in der TENEX C-Shell nicht zulässig.

So leiten Sie sowohl die Standardausgabe als auch die Standardfehlerausgabe /dev/nullin der TENEX C-Shell um:

% sudo bash eine_datei.sh arg1 >& /dev/null

verwandte Informationen