какова стратегия сопоставления команд в оболочке, таких как bash и zsh?

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

Я хочу создать команду псевдонима, которая создает новый файл .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
}

Как ни странно, работает только псевдоним 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 как cp. После того, как я изменил псевдоним с cppgen на cgen, все работает нормально.

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


person luochenhuan    schedule 08.03.2015    source источник
comment
Я мало использовал zsh, но был бы очень удивлен, если бы функция с именем cppgen переопределяла команду cp. Как именно вы вызывали свою функцию cppgen (с какими аргументами)?   -  person Keith Thompson    schedule 08.03.2015
comment
Покажите результаты вызова cppgen -- на реалистичном примере вашего режима использования -- после запуска set -x.   -  person Charles Duffy    schedule 08.03.2015
comment
Псевдонимы имеют приоритет над функциями; взгляните на свой список псевдонимов и посмотрите, определен ли уже cppgen как псевдоним.   -  person racraman    schedule 08.03.2015


Ответы (1)


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

person luochenhuan    schedule 09.03.2015