Você não pode usar um alias para adicionar coisas depois de argumentos, você precisa de uma função. Use um alias apenas para fornecer um nome alternativo a um comando ( alias myalias=mycommand
) ou para fornecer argumentos iniciais ( alias myalias='foo --option1 --option2'
).
No bash, você pode usar qualquer um dos function myfunction { … }
ou myfunction () { … }
ou function myfunction () { … }
para definir uma função. A forma myfunction () …
tem a vantagem de ser portável para todas as sh shells. Os formulários com a palavra-chave function
têm a vantagem de funcionar mesmo se myfunction
for um alias (você pode usar \myfunction () …
para fazer o formulário padrão funcionar nesse caso). Além do pseudônimo, essas sintaxes são exatamente equivalentes no bash.
O que segue o nome da função ou o ()
deve ser um comando complexo bem formado. A julgar pela sua resposta (o código na sua pergunta não produz a mensagem de erro, obviamente você não postou a versão que você testado), seu erro foi que o comando complexo que você escreveu não está correto. As chaves {
e }
são reconhecidas apenas como sintaxe de lista inicial e lista final quando são a primeira coisa em um comando, portanto, você precisa de uma quebra de linha ou um ponto e vírgula antes da chave de fechamento.
Além disso, em vez de passar dois argumentos para diff
e ignorar os outros, você deve passar todos eles. Isso é o que "$@"
é para.
function dif () { diff "$1" "$2" | less; }
Além disso, as personalizações para sessões bash interativas devem entrar em .bashrc
, não .bash_profile
. .bash_profile
é lido apenas por shells de login, não é lido quando você abre uma nova instância do bash, por exemplo em um terminal. Por causa de um defeito de projeto no bash, .bashrc
não é lido por shells de login, mesmo que sejam interativos, então você deve colocar esta linha em seu .bash_profile
:
if [[ $- == *i* ]]; then . ~/.bashrc; fi
e coloque a personalização interativa, como aliases, funções como dif
, combinações de teclas, prompts, etc. em ~/.bashrc
.