У меня есть скрипт Bash (назовем его clock
), который должен работать как оболочка, похожая на ключевое слово time
в Bash, например, clock ls
должен что-то сделать, а затем запустить ls
. Вот пример этого скрипта:
#!/bin/bash
echo "do something"
$@
Обратите внимание, что он не использует exec
, чтобы разрешить перенос встроенных модулей.
Однако, когда аргумент для переноса является ключевым словом time
, он не работает должным образом: выходные данные показывают, что он запускает команду /usr/bin/time
, а не ключевое слово shell.
Как я могу заставить мой скрипт-обертку обрабатывать ключевые слова (например, time
) точно так же, как если бы они были введены непосредственно в оболочке?
Примечание . В моем связанном вопросе я узнал, как заставить его работать, когда в этом же сценарии clock
были функцией Bash, но в моем реальном случае использования clock
фактически являются самим сценарием Bash, поэтому предыдущее решение не работает. Кроме того, решения, упомянутые в связанном вопросе (использование $@
напрямую или запуск exec bash -c ""$@""
), не работают в этом случае.
Одно частичное решение, которое я нашел, состояло в том, чтобы использовать eval $@
, но это очень ненадежно. В этом простом случае он работает со time
, но во многих ситуациях дает сбой, например, в clock ls '~$Document1'
.