Во-первых, используйте функции для чего-нибудь нетривиального; тривиальным псевдонимом будет установка флага по умолчанию:
# no license spam
alias gdb='gdb -q'
почти для всего более сложного я использую функцию.
Два, команда
относится к команде, такой как / bin / ls
или тому подобное; псевдонимы не являются командами и не являются командами функций. Скорее всего, у вас нет команды win
, поэтому команда win
не сможет вызвать функцию, поскольку это не команда.
«Бесконечные» циклы действительно легко создать, кстати
alias fooalias=foofunc
function foofunc() { fooalias; }
, поэтому, если вы пишете функцию с тем же именем, что и команда , тогда команда
становится действительно удобно, так что оболочка не пытается вызывать функцию вечно:
# loops until stack death or segfault or something
function xterm() { xterm ... }
# good
function xterm() { command xterm ... }
Если вы просто пытаетесь заставить какую-то другую функцию вызывать что-то еще, что может быть командой или функцией, просто вызовите ее как есть. Тот, кому нужно вызвать команду, должен использовать команду
.
function winwinwin () { winwin ... }
function winwin () { win ... }
function win () { xterm ... }
function xterm () { command xterm ... }
winwinwin
вызовет функцию winwin
вызовет функцию win
вызовет функцию xterm
, а затем вместо этого вызовет именованный ] команда
.
На передней панели функция
это необязательно, но я использую его, поскольку он упрощает поиск функций ( fgrep function ...
), чем необходимость искать то, что следует возможно, пробелы и ээээээээээээээээээээээээээ, нужно ли экранировать паренсы в движке регулярных выражений, который я использую? Что касается приоритета, легко сделать тесты или распечатать уведомления, которые показывают, что происходит:
ls () { ls -k; echo funcall; }
alias ls='echo blat'
ls
В общем, вероятно, лучше сначала определить функции, а псевдонимы после того, как они будут установлены, для наименьшего удивления:
bash-4.1$ alias ls='echo blat'
bash-4.1$ ls () { command ls -k; echo funcall; }
bash: syntax error near unexpected token `('
bash-4.1$ function ls () { command ls -k; echo funcall; }
bash-4.1$