Теперь я использую оболочку 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, все работает нормально.
Значит ли это, что оболочка не пытается сопоставить точную команду, но кратчайшую команду (я думаю)?
Я не использовал zsh много, но я был бы очень удивлен, если функция с именем 'cppgen' должна была переопределить команду' cp'. Как именно вы вызывали функцию 'cppgen' (с каким аргументом (-ами))? –
Показать результаты вызова 'cppgen' - с реалистичным примером вашего режима использования - после запуска' set -x'. –
Псевдонимы имеют приоритет над функциями; взгляните на свой список псевдонимов и посмотрите, есть ли у вас cppgen, как псевдоним. – racraman