195 votes

Comment puis-je stocker une commande dans une variable dans un script shell?

Je voudrais stocker une commande à utiliser ultérieurement dans une variable (pas la sortie de la commande, mais la commande elle-même).

J'ai un script simple comme suit:

command="ls";
echo "Commande: $command"; #La sortie est: Commande: ls

b=`$command`;
echo $b; #La sortie est public_html REV test... (la commande a fonctionné avec succès)

Cependant, lorsque j'essaie quelque chose de plus compliqué, cela échoue. Par exemple, si je fais

command="ls | grep -c '^'";

La sortie est:

Commande: ls | grep -c '^'
ls: ne peut pas accéder à |: Aucun fichier ou dossier de ce type
ls: ne peut pas accéder à grep: Aucun fichier ou dossier de ce type
ls: ne peut pas accéder à '^': Aucun fichier ou dossier de ce type

Comment pourrais-je stocker une telle commande (avec des pipes/des commandes multiples) dans une variable pour une utilisation ultérieure?

15 votes

Utilisez une fonction!

-8voto

kurumi Points 10096

Il n'est pas nécessaire de stocker les commandes dans des variables même si vous devez les utiliser plus tard. Exécutez-les simplement normalement. Si vous les stockez dans des variables, vous aurez besoin d'une sorte d'instruction eval ou d'invocation d'un processus shell inutile pour "exécuter votre variable".

2 votes

La commande que je vais stocker dépendra des options que j'envoie, donc au lieu d'avoir des tonnes d'instructions conditionnelles dans la majeure partie de mon programme, il est beaucoup plus facile de stocker la commande dont j'ai besoin pour une utilisation ultérieure.

1 votes

@Benjamin, alors stockez au moins les options en tant que variables et non la commande. par exemple var='*.txt'; find . -name "$var"

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