Ich habe eine Shell-Funktion definiert (nennen wir sie clock
), die ich als Wrapper für einen anderen Befehl verwenden möchte, ähnlich der time
Funktion, z clock ls -R
.
Meine Shell-Funktion führt einige Aufgaben aus und endet dann mit exec "$@"
.
Ich möchte, dass diese Funktion auch mit integrierten Shell-Funktionen funktioniert, z. B. clock time ls -R
sollte das Ergebnis der time
integrierten Shell und nicht der /usr/bin/time
ausführbaren Datei ausgegeben werden . Am Ende wird jedoch exec
immer der Befehl ausgeführt.
Wie kann ich meine Bash-Funktion als Wrapper verwenden, der auch integrierte Shell-Argumente als Argumente akzeptiert?
Bearbeiten : Ich habe gerade erfahren, dass dies time
kein eingebauter Bash ist, sondern ein spezielles reserviertes Wort, das sich auf Pipelines bezieht. Ich bin immer noch an einer Lösung für integrierte Funktionen interessiert, auch wenn diese nicht funktioniert time
, aber eine allgemeinere Lösung wäre noch besser.
exec bash -c \' "$@" \'
. Sofern Ihr Befehl im ersten Parameter nicht als Shell-Skript erkannt wird, wird er als Binärdatei interpretiert, die direkt ausgeführt wird. Alternativ und einfacher, verpassen Sie einfach dasexec
und rufen Sie"@"
von Ihrer ursprünglichen Shell aus an.