# Passage d'argument dans un alias ?

**URL:** <https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427 "2016-02-21T12:16:47Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![root\_0x42](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/db5fbb/32.png) [@root\_0x42](https://www.debian-fr.org/u/root_0x42)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/1 "2016-02-21T12:16:47Z")

</div>

Bonjour à tous,

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=‹&nbsp;ls -a -l -p $1 --color | more -d&nbsp;›[/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 ? ![:think:](https://www.debian-fr.org/uploads/default/original/1X/98cae0704aea0201d04f151843e80a3ecd391eca.gif "Think")

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=‹&nbsp;/home/user01/ll.sh&nbsp;›[/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…

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/2 "2016-02-21T12:16:48Z")

</div>

> [@root 0x42](#):
>
> Quelqu’un aurait un petit conseil sur ce coup là, svp ?

C’est possible avec tcsh (et probablement ksh et/ou csh), mais pas en bash ni en zsh. Les développeurs de zsh conseillent d’utiliser des fonctions.

Tu voudrais faire ça :

```auto
alias ll='ls -a -l -p $1 --color | more -d'
```

ils te conseillent de faire ça :

`function ll {
    ls -alp --color -- "$@" | more -d
}`

Tu peux le mettre dans ton bashrc et l’utiliser comme un alias.

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/3 "2016-02-21T12:16:48Z")

</div>

Salut,

`
alias ll='ls -a -l -p $1 --color | more -d'`

```auto

```

Avec un espace à la fin pour dire que c’est pas fini 🙂

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/4 "2016-02-21T12:16:49Z")

</div>

Sinon, un mini-script que tu appelle ‘ll’ 😉

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/5 "2016-02-21T12:16:49Z")

</div>

> [@ricardo](#):
>
> Sinon, un mini-script que tu appelle ‹&nbsp;ll&nbsp;› 😉

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

#code[/code]

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/6 "2016-02-21T12:16:49Z")

</div>

Extrait de mon .bashrc :

`alias apse='aptitude search '
alias apsh='aptitude show '
alias sha256='jacksum -a sha256 '
`

---

<div class="post-metadata">

**Author:** ![root\_0x42](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/db5fbb/32.png) [@root\_0x42](https://www.debian-fr.org/u/root_0x42)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/7 "2016-02-21T12:16:50Z")

</div>

Merci les gars pour vos réponses !

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](http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html) 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…

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/8 "2016-02-21T12:16:51Z")

</div>

> [@root 0x42](#):
>
> 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](http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html) en Unix)

Oui enfin là ça n’est pas une différence Linux/Unix dont tu parles, mais bash/csh… 😉

Sinon, effectivement quand on cherche «&nbsp;bash alias parameter&nbsp;» la réponse dominante semble être celle de MisterFreez (utiliser une fonction). C’est en tous cas la plus élégante à mon avis.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/9 "2016-02-21T12:16:52Z")

</div>

> [@syam](#):
>
> [quote=«&nbsp;root 0x42&nbsp;»]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](http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html) en Unix)

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.

> [@syam](#):
>
> Sinon, effectivement quand on cherche «&nbsp;bash alias parameter&nbsp;» la réponse dominante semble être celle de MisterFreez (utiliser une fonction). C’est en tous cas la plus élégante à mon avis.

C’est aussi la plus puissante.

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/10 "2016-02-21T12:16:56Z")

</div>

Salut,

J’en tire comme conclusion que j’ai des versions spéciales de Debian 😆 sh ==\> dash ?

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/11 "2016-02-21T12:16:57Z")

</div>

> [@ggoodluck47](#):
>
> J’en tire comme conclusion que j’ai des versions spéciales de Debian 😆 sh ==\> dash ?

Je n’ai rien compris à ton message sur les espaces à la fin ?

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/12 "2016-02-21T12:16:57Z")

</div>

Re,

En insérant un espace en fin de définition cela donne :

$ apse headers pour rechercher les “headers” 🙂

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/13 "2016-02-21T12:16:58Z")

</div>

L’espace en fin ne change de toute manière rien.

`alias apse='aptitude search '
apse headers`  
fonctionne aussi bien que :

`alias apse='aptitude search'
apse headers`  
Testé avec dash, bash, zsh et tcsh.

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 21, 2016, 12:16 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/14 "2016-02-21T12:16:59Z")

</div>

Re,

J’appliquais cette méthode pour l’avoir lu et sans chercher plus loin 😊

---

<div class="post-metadata">

**Author:** ![root\_0x42](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/db5fbb/32.png) [@root\_0x42](https://www.debian-fr.org/u/root_0x42)\
**Post date:** [Février 21, 2016, 12:17 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/15 "2016-02-21T12:17:08Z")

</div>

J’ai potassé un peu les fonctions en Bash (notamment grâce à ce [site](http://abs.traduc.org/abs-5.0-fr/ch23.html) 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 😃

Merci à tous pour votre aide !  
A+

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 12:17 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/16 "2016-02-21T12:17:09Z")

</div>

Petite remarque…  
Ça donne quoi si tu fais ll «&nbsp;chemin avec des espaces dedans&nbsp;» ? ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")  
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 «&nbsp;$@&nbsp;» (recopier tous les arguments au lieu seulement du premier), et accessoirement ça résout aussi le premier problème en même temps

`ll () {
    ls -a -l -p --color "$@" |more -d
}`  
😉

---

<div class="post-metadata">

**Author:** ![root\_0x42](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/db5fbb/32.png) [@root\_0x42](https://www.debian-fr.org/u/root_0x42)\
**Post date:** [Février 21, 2016, 12:32 UTC](https://www.debian-fr.org/t/passage-dargument-dans-un-alias/53427/17 "2016-02-21T12:32:23Z")

</div>

Avec un peu de retard, certes mais merci syam pour ta dernière astuce ! (et en plus j’ai appris qu’on pouvait passer plusieurs arguments à ls)

![:clap:](https://www.debian-fr.org/uploads/default/original/1X/dcfd4d2428519214f79b4b87bcebcb3197047574.gif "Clap")
