1821 votes

Créer un alias Bash qui prend un paramètre ?

J'avais l'habitude d'utiliser CShell ( csh ), qui vous permet de créer un alias qui prend un paramètre. La notation était quelque chose comme

alias junk="mv \\!* ~/.Trash"

Dans Bash, cela ne semble pas fonctionner. Étant donné que Bash possède une multitude de fonctionnalités utiles, je suppose que celle-ci a été implémentée, mais je me demande comment.

3 votes

3 votes

Assurez-vous que vous utilisez des guillemets autour des args "$1"

1 votes

Cette question est hors sujet pour l'OS. Elle a été répondu sur UNIX.SE et la réponse est que vous n'avez même pas besoin de vous en soucier : "Par exemple, si vous deviez aliaser ls a ls -la puis en tapant ls foo bar serait vraiment exécuter ls -la foo bar sur la ligne de commande".

4voto

dirdi Points 227

Comme d'autres l'ont déjà souligné, l'utilisation d'une fonction doit être considérée comme une bonne pratique.

Cependant, voici une autre approche, qui s'appuie sur xargs :

alias junk="xargs -I "{}" -- mv "{}" "~/.Trash" <<< "

Notez que cela a des effets secondaires concernant la redirection des flux.

4voto

Neeraj Points 46

Pour donner une réponse spécifique à la question posée sur la création de l'alias pour déplacer les fichiers vers le dossier Trash au lieu de les supprimer :

alias rm="mv "$1" -t ~/.Trash/"

Bien sûr, vous devez d'abord créer le répertoire ~/.Trash.

Ensuite, il suffit de donner la commande suivante :

$rm <filename>
$rm <dirname>

3voto

ShitalShah Points 2213

Voici l'exemple :

alias gcommit='function _f() { git add -A; git commit -m "$1"; } ; _f'

Très important :

  1. Il y a un espace après { et avant } .
  2. Il existe un ; après chaque commande en séquence. Si vous oubliez ceci après la dernière commande, vous verrez > à la place !
  3. L'argument est placé entre guillemets comme "$1"

3voto

elomage Points 583

Voici une autre approche utilisant read . Je l'utilise pour la recherche brute d'un fichier par son fragment de nom, en ignorant les messages "permission refusée".

alias loc0='{ IFS= read -r x; find . -iname "*" -print 2>/dev/null | grep $x;} <<<'

Un exemple simple :

$ { IFS= read -r x; echo "1 $x 2 ";} <<< "a b"
1 a b 2 

Notez que cela convertit l'argument sous forme de chaîne en variable(s). On peut utiliser plusieurs paramètres entre guillemets, séparés par des espaces :

$ { read -r x0 x1; echo "1 ${x0} 2 ${x1} 3 ";} <<< "a b"
1 a 2 b 3

2voto

sxc731 Points 1090

Les fonctions sont en effet presque toujours la réponse, comme l'a déjà amplement contribué et confirmé cette citation de la page de manuel : "Pour presque tous les usages, les alias sont supplantés par les fonctions du shell."

Pour être complet et parce que cela peut être utile (syntaxe légèrement plus légère), on pourrait noter que lorsque le(s) paramètre(s) suit(vent) l'alias, il(s) peut(vent) toujours être utilisé(s) (bien que cela ne réponde pas à l'exigence du PO). C'est probablement plus facile à démontrer avec un exemple :

alias ssh_disc='ssh -O stop'

me permet de taper quelque chose comme ssh_disc myhost qui se développe comme prévu en tant que : ssh -O stop myhost

Cela peut être utile pour les commandes qui prennent des arguments complexes (ma mémoire n'est plus ce qu'elle était...).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X