Interprétation des alias

J'ai quelques alias dans .bash_aliases . J'ai défini c alias comme suit, mais cela ne fonctionne pas comme il se doit:

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

Dans .bashrc il y a une ligne:

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

Commnand c donne une mauvaise sortie maintenant. Il devrait donner la même sortie que cd; clear; ls -r --time=atime --color=auto cd; clear; ls -r --time=atime --color=auto cd; clear; ls -r --time=atime --color=auto .

Autre problème: Quand je tape cd dir je devrais restr dans dir mais je suis dans $HOME en conséquence.

Comment puis-je résoudre cela et améliorer la définition des alias? .bash_aliases est interprété comme une regular grammar ?

Utilisez plutôt des fonctions, l'avantage étant la possibilité de passer des parameters et une syntaxe plus claire.

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

(la command est un bash builtin utilisé pour se référer à la command réelle, et pas les fonctions du même nom).

c devrait être exactement équivalent à cd . Je suppose que vous verrez la même erreur de cd dir que de c dir , et que c fonctionne seul.

cd ne fonctionnera pas comme vous l'avez défini, car les alias effectuent une simple substitution de text. cd dir est étendu à cd; ls -r --time=atime dir cd; ls -r --time=atime dir . Les alias sont limités à donner une command à un nom plus court ou à fournir des options par défaut, par exemple alias c=cd ou alias cp='cp -i' . Pour tout ce qui est plus complexe, comme l'exécution de plusieurs commands, utilisez une fonction.

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

Voir aussi Alias ​​vs fonctions vs scripts , Comment passer des parameters à un alias? .