Ähnliche Frage, aber keine Antwort:Wie können wir einen in einer Variablen gespeicherten Befehl ausführen?
Wie macht man Folgendes im Bash-Skript?
error=">&2"
echo 'something went wrong' $error
anstatt
echo 'something went wrong' >&2
Warum?
Wenn Sie einen Tippfehler wie eingeben >2&
, funktioniert es zwar normal, schreibt aber Fehlermeldungen in eine Datei mit dem Namen 2
.
Antwort1
Wie in den Kommentaren gesagt: Das ist eigentlich nicht der Fall.
Nun, Sie könnten das mit tun eval
, aber Sie hätten Probleme damit, alles in Anführungszeichen zu setzen/zu maskierenandersauf dieser Befehlszeile.
Es gibt jedoch einige Dinge, die Sie mit Funktionen tun können: einen bestimmten einfachen Befehl unter einer Umleitung ausführen oder einfach eine Nachricht an stderr schreiben:
#!/bin/bash
tostderr() {
"$@" >&2
}
warn() {
local IFS=" "
printf "%s\n" "$*" >&2
}
tostderr printf "warning: %s\n" "something happened"
warn another thing to warn about
Schwerpunkt auf dereinfachBefehl auf dem ersten, das ist es nicht eval
und Sie können keine Shell-Syntax innerhalb des Befehls haben. Beispielsweise tostderr foo | bar
leitet es die Ausgabe von just um foo
(über die Pipe nach stderr) und tostderr (foo | bar)
funktioniert nicht.
Wenn Sie zsh verwenden und dies wirklich wollten, könnten Sie einen globalen Alias verwenden, um die Umleitung hinzuzufügen (manche denken vielleicht, dass dies an verschleierte Codierung grenzt):
#/usr/bin/zsh
alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR