Wie Sie eine Funktion in der Bash schreiben, die den Befehl ausführt, dass es als Argument angegeben wird, woBash Funktion Befehl Aufruf als Argument angegeben
- Der gegebene Befehl ein Alias
- Argumente sein sein muss genau wie gegeben weitergegeben; keine
Mit anderen Worten erfolgt Auswerten kann, wie eine als transparente-as-möglich Wrapper Funktion zu schreiben.
Das Ziel der Wrapper-Funktion könnte zum Beispiel sein, das aktuelle Verzeichnis vor und nach dem gegebenen Befehl zu setzen und/oder Umgebungsvariablen zu setzen, oder Zeit wie lange der gegebene Befehl dauert, ... Als ein einfaches Beispiel hier Ich nehme eine Funktion, die nur eine Zeile ausgibt und dann den angegebenen Befehl ausführt.
Ein erster Versuch:
function wrap1 {
echo Starting: "[email protected]"
"[email protected]"
}
Sie es wie wrap1 echo hello
nutzen könnten. Aber das Problem ist, Sie können alias myalias echo
nicht tun und dann wrap1 myalias hello
aufrufen: Es würde den Alias nicht auflösen.
Ein weiterer Versuch mit eval
:
function wrap2 {
echo Starting: "[email protected]"
eval "[email protected]"
}
nun ein Alias Werke aufrufen. Aber das Problem ist, dass es auch die Argumente bewertet. Zum Beispiel wrap2 echo "\\a"
druckt nur a
anstelle von \a
, weil die Argumente zweimal ausgewertet werden.
shopt -s expand_aliases
scheint hier auch nicht zu helfen.
Gibt es eine Möglichkeit, Aliase wie wrap2 auszuwerten, aber die Argumente trotzdem wie wrap1 weiterzugeben?
Ihre erste Funktion ist der Weg zu gehen. Geben Sie Aliase nicht richtig ab. ["Für fast jeden Zweck werden Shell-Funktionen gegenüber Aliasen bevorzugt."] (Http://www.gnu.org/software/bash/manual/html_node/Aliases.html#Aliases) –
[Erforderlich] (http://mywiki.wooledge.org/BashFAQ/050) –