#zsh #sh #zshrc
#zsh #sh #zshrc
Вопрос:
Я хочу добавить в свой .zshrc функцию, которая будет выполнять операции с файлом, имеющим суффикс «.c». Например,
*.c () {
gcc $0 -o ${0%.*}
}
должен выполнять «gcc foo.c -o foo» при вводе «foo.c»
Но когда я добавил эту функцию в «.zshrc», моя оболочка начинает печатать «совпадений не найдено: *.c» при входе в систему.
Могу ли я сделать это другим способом или сделать эту функцию «ленивой»?
Ответ №1:
Вам понадобится alias -s
поведение. Из справочных страниц:
ALIASES
Suffix aliases are supported in zsh since version 4.2.0. Some examples:
alias -s tex=vim
alias -s html=w3m
alias -s org=w3m
Now pressing return-key after entering foobar.tex starts vim with foobar.tex. Calling
a html-file runs browser w3m. www.zsh.org and pressing enter starts w3m with argument
www.zsh.org.
Объедините написанную вами функцию с псевдонимом суффикса, и вы должны быть готовы к работе!
Сначала напишите свою функцию в этой форме:
compile_c () {
gcc $1 -o ${1%.*}
}
И затем псевдоним суффикса
alias -s c='compile_c'
будет работать так, как задумано.
Комментарии:
1. Это не работает, потому что переменные $ 0, $ 1, $ 2 не определены в alias
2. @user123980801 Я думаю, именно это имел в виду progo:
__gcc_compile () { gcc $1 -o ${1%.*} }; alias -s c=__gcc_compile
— У меня это работает с zsh 4.3.11.