Pour plus de confort, j’utilise très souvent la commande ls de cette façon :~$ ls -a -l -p mon_répertoire_cible --color|more -d
J’ai donc créé un alias ll dans ~/.bash_aliases :[code]~$ cat .bash_aliases
ls en couleur affiché page par page
alias ll=‹ ls -a -l -p $1 --color | more -d ›[/code]sauf que l’argument passé avec l’alias n’est pas pris en compte :[code]~$ ll /media
total 16
drwxr-xr-x 3 user01 user01 1024 21 mai 16:29 ./
drwxr-xr-x 4 root root 1024 13 avril 17:55 ../
drwx------ 2 user01 user01 1024 13 avril 23:07 .aptitude/
-rw-r–r-- 1 user01 user01 83 21 mai 16:29 .bash_aliases
-rw------- 1 user01 user01 1644 21 mai 16:30 .bash_history
-rw-r–r-- 1 user01 user01 220 13 avril 17:55 .bash_logout
-rw-r–r-- 1 user01 user01 3253 13 avril 23:40 .bashrc
-rw-r–r-- 1 user01 user01 3184 13 avril 17:55 .bashrc.old
-rw-r–r-- 1 user01 user01 675 13 avril 17:55 .profile
*** /media: directory ***
~$[/code]Pourtant, je ne vois pas ce qui foire dans mon alias ?
Il y a bien sinon la solution de créer un script ll.sh :[code]~$ cat ll.sh
#! /bin/bash
ls en couleur affiché page par page
ls -a -l -p $1 --color | more -d
exit 0[/code]puis de modifier l’alias :[code]~$ cat .bash_aliases
ls en couleur affiché page par page
alias ll=‹ /home/user01/ll.sh ›[/code]et là, ça fonctionne bien :~$ ll /media
total 12
drwxr-xr-x 3 root root 4096 21 mai 13:35 ./
drwxr-xr-x 22 root root 4096 11 déc. 17:09 ../
lrwxrwxrwx 1 root root 6 29 oct. 2011 cdrom -> cdrom0/
drwxr-xr-x 2 root root 4096 29 oct. 2011 cdrom0/
-rw-r--r-- 1 root root 0 21 mai 13:35 .hal-mtab
~$mais je trouve cette solution un peu lourde.
Quelqu’un aurait un petit conseil sur ce coup là, svp ?
Merci à vous…
C’est possible mais un peu plus lourd. Chacun fait son choix. Personnellement en principe quand ça dépasse quelques lignes c’est un script. En dessous ça reste une fonction.
Sachant que le passage de l’un à l’autre c’est rien hein, la fonction :
function nom {
# code
}
devient le script :
[code]#!/bin/bash # pour avoir exactment le même comportement que la fonction
Donc en gros, si je comprends bien, il ne semble pas être possible de passer un argument dans un alias… (Je pensais qu’on pouvait aussi le faire sur Linux, comme mentionné ici en Unix)
@ggoodluck47 : au début, j’ai franchement cru à un joke !
J’ai quand même essayé mais ça ne fonctionne pas mieux…
@ricardo : c’est un peu ce que je fais déjà… mais j’aime pas trop enlever l’extension pour les scripts (je trouve que ça ne fait pas propre, mais ça n’engage que moi)
@MisterFreez : merci du tuyau, je ne savais pas qu’on pouvait inclure des fonctions dans bashrc.
Je vais y jetter un oeil ce soir…
Oui enfin là ça n’est pas une différence Linux/Unix dont tu parles, mais bash/csh…
Sinon, effectivement quand on cherche « bash alias parameter » la réponse dominante semble être celle de MisterFreez (utiliser une fonction). C’est en tous cas la plus élégante à mon avis.
Oui enfin là ça n’est pas une différence Linux/Unix dont tu parles, mais bash/csh… [/quote]
Les unix utilisant généralement par défaut tcsh ou csh ce n’est pas totalement faux non plus.
J’ai potassé un peu les fonctions en Bash (notamment grâce à ce site pour ceux que ça intéresserait) et, comme conseillé par MisterFreez, j’ai remplacé mon script + alias en fonction “ll” : ll () {
ls -a -l -p $1 --color|more -d
}
ça marche nickel
Petite remarque…
Ça donne quoi si tu fais ll « chemin avec des espaces dedans » ?
Et si tu fais ll chemin1 chemin2 ? (c’est une utilisation tout à fait valide de ls)
Pour résoudre ces deux problèmes :
passer l’argument --color avant le(s) chemin(s), ça évitera la confusion si tu spécifies plusieurs chemins
mettre des guillemets autour de $1 ça permettrait d’éviter le premier problème (sans aucun doute le plus courant)
le deuxième problème pourrait être résolu en remplaçant $1 par « $@ » (recopier tous les arguments au lieu seulement du premier), et accessoirement ça résout aussi le premier problème en même temps