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? .