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!
7 votes
Voir ce post : Pourquoi eviter l'utilisation de eval en Bash, et que dois-je utiliser à la place?.
0 votes
Voir aussi Pourquoi l'interpréteur de commandes ignore-t-il les caractères de citation dans les arguments transmis à travers des variables? et le similaire mywiki.wooledge.org/BashFAQ/050