Zdefiniowałem funkcję powłoki (nazwijmy ją clock
), której chcę użyć jako opakowania innego polecenia, podobnego do time
funkcji, np clock ls -R
.
Moja funkcja powłoki wykonuje niektóre zadania, a następnie kończy się na exec "$@"
.
Chciałbym, aby ta funkcja działała nawet z wbudowanymi powłokami, np. clock time ls -R
Powinna wypisywać wynik time
wbudowanego, a nie /usr/bin/time
pliku wykonywalnego. Ale exec
zawsze kończy się uruchomienie polecenia.
Jak mogę sprawić, by moja funkcja Bash działała jako opakowanie, które przyjmuje również argumenty wbudowane powłoki?
Edycja : Właśnie dowiedziałem się, że time
nie jest to wbudowane Bash, ale specjalne słowo zastrzeżone związane z potokami. Nadal jestem zainteresowany rozwiązaniem dla wbudowanych, nawet jeśli nie działa time
, ale bardziej ogólne rozwiązanie byłoby jeszcze lepsze.
exec bash -c \' "$@" \'
. O ile polecenie w pierwszym parametrze nie jest rozpoznawane jako skrypt powłoki, to będzie interpretowane jako plik binarny do bezpośredniego uruchomienia. Alternatywnie i prościej, po prostu przegapexec
i zadzwoń"@"
z oryginalnej powłoki.