Вы не можете использовать псевдоним для добавления материала после аргументов, вам нужна функция. Используйте псевдоним только для того, чтобы дать команде альтернативное имя ( псевдоним myalias = mycommand
) или предоставить начальные аргументы ( псевдоним myalias = 'foo --option1 --option2'
).
В bash можно использовать любую из function myfunction {…}
или myfunction () {…}
или function myfunction () {…}
, определить функцию. Форма myfunction ()…
имеет то преимущество, что она переносима во все оболочки sh. Формы с ключевым словом function
имеют то преимущество, что работают, даже если myfunction
является псевдонимом (вы можете использовать \ myfunction ()…
, чтобы стандартная форма работала в этом случае). За исключением псевдонима, эти синтаксисы в bash точно эквивалентны.
То, что следует за именем функции или ()
, должно быть правильно сформированной сложной командой.Судя по вашему ответу (код в вашем вопросе не вызывает сообщения об ошибке, очевидно, вы не опубликовали тестируемую версию), ваша ошибка заключалась в том, что написанная вами сложная команда неверна. Фигурные скобки {
и }
распознаются как синтаксис начального и конечного списка только тогда, когда они являются первым элементом команды, поэтому вам нужен разрыв строки или точка с запятой перед закрывающая скобка.
Кроме того, вместо того, чтобы передавать два аргумента в diff
и игнорировать остальные, вы должны передать их все. Для этого "$ @"
.
function dif () { diff "$1" "$2" | less; }
Кроме того, настройки для интерактивных сеансов bash должны идти в .bashrc
, а не в .bash_profile
. .bash_profile
читается только оболочками входа в систему, он не читается, когда вы открываете новый экземпляр bash, например в терминале. Из-за дефекта конструкции в bash .bashrc
не читается оболочками входа, даже если они интерактивны, поэтому вам следует поместить эту строку в свой .bash_profile
:
if [[ $- == *i* ]]; then . ~/.bashrc; fi
и поместите интерактивные настройки, такие как псевдонимы, функции вроде dif
, привязки клавиш, подсказки и т. д. в ~ / .bashrc
.