функция оболочки «*.foo»

#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.