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