Bonjour,

Je suis confronté à un problème récurrent dont je n'arrive pas à trouver la solution.

L'idée est, dans un environnement bash (sur Ubuntu 18 #46~18.04.1), d'envoyer des commandes via des variables d'environnement (je sais, c'est une drôle d'idée ). Le but est d'afficher la commande puis le résultat.

En gros, le script, qu'on appellera mon_script.sh, contient ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
# mon_script.sh
echo "Nous allons exécuter la commande suivante : ${COMMAND}"
${COMMAND}
En soi, ça ne parait pas sorcier.
Par exemple, si la commande consiste à chercher le texte "super" dans toto.txt (qui contient une ligne "c'est super chouette"), ça donnera ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
export COMMAND="grep super toto.txt"
./mon_script.sh
et la sortie doit donner ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Nous allons exécuter la commande suivante : grep Super toto.txt
C'est super chouette
Là où ça se gâte, c'est si je veux chercher la chaîne "super chouette". J'aurais tendance à faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
export COMMAND="grep \"super chouette\" toto.txt"
avec les \" pour indiquer que c'est bien le caractère guillemet que je veux
ou alors ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
export COMMAND="grep 'super chouette' toto.txt"
avec les simples guillemets autour de la chaîne cherchée.

Mais, dans les deux cas, alors que la syntaxe donne ce que je veux dans le terminal, la sortie via mon_script.sh donne alors ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Nous allons exécuter la commande suivante : grep "super chouette" toto.txt
grep chouette" : No such file or directory
Si j'utilise des guillemets simples
Code : Sélectionner tout - Visualiser dans une fenêtre à part
export COMMAND="grep 'super chouette' toto.txt"
alors j'ai ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Nous allons exécuter la commande suivante : grep 'super chouette' toto.txt
grep chouette' : No such file or directory
Si directement dans la fenêtre je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
grep super\ chouette toto.txt
ça marche.

Par contre, avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
export COMMAND="grep super\\ chouette toto.txt"
j'ai cette fois ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Nous allons exécuter la commande suivante : grep super\ chouette toto.txt
grep: Trailing backslash
Bref, c'est à devenir fou .

Et je ne parle même pas d'un pipe dans la commande ou d'une redirection, j'ai l'impression que ce n'est même pas la peine d'y penser.

Auriez-vous une petite idée pour me sortir du pétrin ?

Merci d'avance.