Exécutez une autre commande avant d'exécuter la commande que l'utilisateur souhaite exécuter

9

Supposons que je souhaite modifier le comportement d'origine de l' lsoutil de cette façon:

$ ls
Hello World
file1 file2 ...

Comment puis-je faire ceci?

Lors de l'exécution, lsje voudrais exécuter une autre commande, disons echo "Hello World!".

La solution rapide que je vois utilise l'alias:

alias orig_ls="ls"
alias ls='echo "Hello World!"'

Cependant, ce n'est pas une vraie solution, car lorsque je l'exécuterai, orig_lsil sortira "Hello World!".

Ionică Bizău
la source
Mettez un autre ls dans le propre chemin de l'utilisateur et utilisez-le pour accrocher l'original.
peterh

Réponses:

12

Parfois, un alias n'est pas assez puissant pour faire facilement ce que vous voulez, alors voici un moyen sans les utiliser.

Dans un fichier provenant du démarrage de votre shell (par exemple .bashrc), ajoutez la fonction suivante:

ls () {
    echo "Hello world!"
    command ls "$@"
}

Contrairement à un alias, une fonction peut récursivement. C'est pourquoi command lsest utilisé à la place de ls; il indique à votre shell d'utiliser la fonction réelle lsau lieu de la fonction que vous venez de définir.

métro monorail
la source
2
En effet. Cette solution évolue mieux. +1
PythonNut
Quelle est l' commandalternative pour OS X?
Ionică Bizău
@ IonicăBizău Je n'ai aucune idée commandn'a pas fonctionné: / Je n'ai aucune idée et je n'ai pas de Mac avec lequel le tester, désolé.
undergroundmonorail
9

Vous ne devez pas oublier d'appeler ls:

alias ls='echo "Hello World!"; ls'
Hauke ​​Laging
la source
Ha! Je suppose que cela va créer un cycle infini! Mais pourquoi ne crée-t-il pas une boucle infinie?
Ionică Bizău
1
Vous pouvez plutôt essayer l'écho de l'alias ls "Hello World!"; / usr / bin / ls '
jamesqf
5
@ IonicăBizău toute "règle d'expansion d'alias" donnée n'est utilisée qu'une seule fois.
David Z
Est-ce que joindre les deux avec un & fonctionnerait aussi? Cela garantirait également que la commande de l'utilisateur n'est exécutée que si la commande personnalisée fonctionne, non?
Fund Monica's Lawsuit
@QPaysTaxes Vous pouvez en &effet utiliser, mais je ne comprends pas l'argument que vous faites à partir de cela.
Hauke ​​Laging du