Я определил функцию оболочки (давайте назовем ее clock), которую я хочу использовать в качестве оболочки для другой команды, аналогично timeфункции, например clock ls -R.
Моя функция оболочки выполняет некоторые задачи и затем заканчивается на exec "$@".
Мне бы хотелось, чтобы эта функция работала даже со встроенными оболочками, например, clock time ls -Rдолжна выводить результат timeвстроенной функции, а не /usr/bin/timeисполняемый файл. Но execвсегда заканчивается тем, что запускает команду.
Как я могу заставить мою функцию Bash работать как оболочка, которая также принимает встроенные функции оболочки в качестве аргументов?
Редактировать : я только что узнал, что timeэто не встроенный Bash, а специальное зарезервированное слово, относящееся к конвейерам. Мне все еще интересно решение для встроенных модулей, даже если оно не работает time, но более общее решение было бы еще лучше.
exec bash -c \' "$@" \'. Если ваша команда в первом параметре не будет распознана как сценарий оболочки, она будет интерпретироваться как двоичный файл для непосредственного запуска. В качестве альтернативы, и более просто, просто пропуститеexecи вызов"@"из вашей оригинальной оболочки.