J'essaie de créer un alias dans bash. Ce que je veux faire, c'est mapper ls -la
à ls -la | more
Voici ce que j'ai essayé dans mon fichier .bashrc:
alias 'ls -la'='ls -la | more'
Cependant, cela ne fonctionne pas car (je suppose) il y a des espaces dans le nom d'alias. Y a-t-il un moyen de contourner ce problème?
La documentation de Bash indique "Dans la plupart des cas, les fonctions de Shell sont préférées aux alias." Voici une fonction Shell qui remplace ls
et provoque le routage de la sortie vers more
si l'argument est constitué de (uniquement) -la
.
ls() {
if [[ $@ == "-la" ]]; then
command ls -la | more
else
command ls "$@"
fi
}
En une ligne:
ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }
Tuyauter automatiquement la sortie:
ls -la
Depuis la page de manuel des alias :
Le premier mot de chaque commande simple, s'il n'est pas cité, est vérifié pour voir s'il a un alias. Si c'est le cas, ce mot est remplacé par le texte de l'alias. Le nom d'alias et le texte de remplacement peuvent contenir toute entrée Shell valide, y compris les métacaractères Shell, à l'exception du fait que le nom d'alias peut ne pas contenir "=".
Ainsi, seul le premier mot est vérifié pour les correspondances d'alias, ce qui rend impossible les alias multi-mots. Vous pourrez peut-être écrire un script shell qui vérifie les arguments et appelle votre commande s’ils concordent et appelle simplement la variable normale ls
(voir @ réponse de Dennis Williamson )
Une approche légèrement améliorée tirée de la réponse de Dennis:
function ls() {
case $* in
-la* ) shift 1; command ls -la "$@" | more ;;
* ) command ls "$@" ;;
esac
}
Ou le one-liner:
function ls() { case $* in -la* ) shift 1; command ls -la "$@" | more ;; * ) command ls "$@" ;; esac }
Cela permet d’ajouter d’autres options/arguments après la commande, par exemple ls -la -h
.