Zdefiniowałem funkcję powłoki (nazwijmy ją clock), której chcę użyć jako opakowania innego polecenia, podobnego do timefunkcji, 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 -RPowinna wypisywać wynik timewbudowanego, a nie /usr/bin/timepliku wykonywalnego. Ale execzawsze 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 timenie 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 przegapexeci zadzwoń"@"z oryginalnej powłoki.