Сейчас я использую оболочку 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, все работает нормально.
Значит ли это, что оболочка не пытается сопоставить точную команду, а кратчайшую совпадающую команду (я думаю)?
cppgen
переопределяла командуcp
. Как именно вы вызывали свою функциюcppgen
(с какими аргументами)? - person Keith Thompson   schedule 08.03.2015cppgen
-- на реалистичном примере вашего режима использования -- после запускаset -x
. - person Charles Duffy   schedule 08.03.2015