функция принимает командную строку, но не псевдонимы

Я создал эту функцию doit для выполнения системных команд, скриптов и псевдонимов.

function doit {
doit_cmd=$*
if [[ $cmd_trace = "1" ]] then
    echo "+ $doit_cmd"
fi  

$doit_cmd 
ret=$?
return $ret
}

Функция doit принимает командную строку (включая параметры команды). Сначала он выводит данную команду и ее параметры на стандартный вывод, а затем выполняет команду. Я выполняю команды в сценариях через функцию doit, чтобы отслеживать, какие команды выполняются. Строка «$doit_cmd» в приведенной выше функции doit прекрасно работает для системных команд и сценариев, но не работает, когда функции doit присвоен псевдоним.

Вот демонстрация проблемы.

$ псевдоним wi='whoami'
$ cmd_trace=1

$ doit whoami
+ whoami

корень

$ doit wi
+ wi doit[6]: wi: не найдено

Может ли кто-нибудь помочь мне в этой проблеме? Это ограничение?


person Goldi    schedule 14.02.2011    source источник


Ответы (1)


Выполните свою команду, используя: eval $doit_cmd.

В отдельной заметке, я думаю, вам также следует изменить $* на "$@".

person dogbane    schedule 14.02.2011
comment
Привет Dogbane! Большое спасибо за помощь и поддержку. Я включил изменения, и он работает нормально. - person Goldi; 14.02.2011