2015-03-08 4 views
0

Теперь я использую оболочку zsh, но я предполагаю, что ее стратегия соответствия команд такая же, как и bash. Вот что:Какова стратегия совпадения команд в shell, таких как bash и zsh?

Я хочу сделать команду alias, которая создает новый .cpp-файл с использованием файла шаблона и принимает первый аргумент в качестве нового имени файла. Я также пишу псевдоним для шаблона Java.

Это функции. zshrc:

function cppgen() 
{ 
    cp ~/Documents/Templates/cpp_template.cpp ./$1.cpp 
    vim ./$1.cpp 
} 

function javagen() 
{ 
    cp ~/Documents/Templates/java_template.java ./$1.java 
    vim ./$1.java 
} 

Weiredly, только javagen псевдоним работает. Когда я использую cppgen, оболочка печатает:

usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file 
     cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory 

После борьбы на некоторое время, я, наконец, понял, что оболочка воспринимает мою cppgen команду, как ф. После того, как я сменил псевдоним от cppgen до cgen, все работает нормально.

Значит ли это, что оболочка не пытается сопоставить точную команду, но кратчайшую команду (я думаю)?

+0

Я не использовал zsh много, но я был бы очень удивлен, если функция с именем 'cppgen' должна была переопределить команду' cp'. Как именно вы вызывали функцию 'cppgen' (с каким аргументом (-ами))? –

+0

Показать результаты вызова 'cppgen' - с реалистичным примером вашего режима использования - после запуска' set -x'. –

+0

Псевдонимы имеют приоритет над функциями; взгляните на свой список псевдонимов и посмотрите, есть ли у вас cppgen, как псевдоним. – racraman

ответ

0

Спасибо всем за комментарии. Теперь я могу установить псевдоним как cppgen. Я ничего не изменил. Не знаете, что случилось ... Может быть, мне нужно больше кофе перед публикацией в StackOverflow.