У меня есть скрипт 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' .
