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

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

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

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

Solution

L'alias Bash n'accepte pas directement les paramètres. Vous devrez créer une fonction.

alias n'accepte pas de paramètres mais une fonction peut être appelée tout comme un alias. Par exemple :

myfunction() {
    #do things with parameters like $1 such as
    mv "$1" "$1.bak"
    cp "$2" "$1"
}

myfunction old.conf new.conf #calls `myfunction`

Au fait, les fonctions Bash définies dans votre .bashrc et d'autres fichiers sont disponibles comme des commandes dans votre shell. Ainsi, par exemple, vous pouvez appeler la fonction précédente comme ceci

$ myfunction original.conf my.conf
Commentaires (19)

En affinant la réponse ci-dessus, vous pouvez obtenir une syntaxe d'une ligne comme pour les alias, ce qui est plus pratique pour les définitions ad-hoc dans un shell ou des fichiers .bashrc :

bash$ myfunction() { mv "$1" "$1.bak" && cp -i "$2" "$1"; }

bash$ myfunction original.conf my.conf

N'oubliez pas le point-virgule avant l'accolade de fermeture. De même, pour la question actuelle :

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

bash$ junk() { mv "$@" ~/.Trash/; }

Ou bien :

bash$ junk() { for item in "$@" ; do echo "Trashing: $item" ; mv "$item" ~/.Trash/; done; }
Commentaires (8)

Voici trois exemples de fonctions que j'ai dans mon ~/.bashrc, qui sont essentiellement des alias qui acceptent un paramètre :

#Utility required by all below functions.
#https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variable#comment21953456_3232433
alias trim="sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*\$//g'"

.


:
Commentaires (6)