Interpretação de aliases

6

Eu tenho alguns aliases em .bash_aliases . Eu defini c alias como segue, mas não funciona como deveria:

...
alias cd='cd; ls -r --time=atime'
alias c='cd'
...

Em .bashrc , há uma linha:

alias ls='clear; ls --color=auto'

Commnand c fornece resultados ruins agora. Deve dar o mesmo resultado que cd; clear; ls -r --time=atime --color=auto .

Outro problema: quando digito cd dir , devo ficar em dir , mas como $HOME .

Como posso resolver isso e melhorar a definição de aliases? .bash_aliases é interpretado como regular grammar ?

    
por xralf 01.09.2011 / 18:17

2 respostas

9

Use funções em vez disso, a vantagem é a possibilidade de passar parâmetros e uma sintaxe mais limpa.

function cd() {
  command cd "$@"
  ls -r --time=atime
}

function c() {
 cd "$@"
}

function ls() {
  clear
  command ls --color=auto "$@"
}

( command é um bash embutido usado para se referir ao comando real e não funciona com o mesmo nome).

    
por 01.09.2011 / 18:42
4

c deve ser exatamente equivalente a cd . Espero que você veja o mesmo erro de cd dir a partir de c dir e que c sozinho funcione.

cd não funciona da maneira como você definiu, porque os aliases executam uma substituição de texto simples. cd dir é expandido para cd; ls -r --time=atime dir . Os aliases são muito limitados a atribuir um comando a um nome mais curto ou a fornecer opções predefinidas, por ex. alias c=cd ou alias cp='cp -i' . Para algo mais complexo, como executar vários comandos, use uma função.

cd () {
  command cd "$@" &&
  ls -r --time=atime
}

Veja também Aliases vs funções vs scripts , Como passar parâmetros para um alias? .

    
por 02.09.2011 / 01:27

Tags