So speichern Sie '>&2' in einer Variablen

So speichern Sie '>&2' in einer Variablen

Ä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 evalund Sie können keine Shell-Syntax innerhalb des Befehls haben. Beispielsweise tostderr foo | barleitet 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

verwandte Informationen