Je veux exécuter une commande à partir d'un bash script qui a des guillemets simples et quelques autres commandes à l'intérieur des guillemets simples et une variable.
par exemple repo forall -c '....$variable'
Dans ce format, $
est échappé et la variable n'est pas développée.
J'ai essayé les variantes suivantes, mais elles ont été rejetées :
repo forall -c '...."$variable" '
repo forall -c " '....$variable' "
" repo forall -c '....$variable' "
repo forall -c "'" ....$variable "'"
Si je substitue la valeur à la place de la variable, la commande est exécutée sans problème.
S'il vous plaît, dites-moi où je me trompe.
60 votes
repo forall -c ' ...before... '"$variable"' ...after...'
3 votes
@n.m. les guillemets simples font partie de la commande repo. je ne pense pas que cela fonctionnera.
1 votes
bash
mange des guillemets simples. Soit vous n'êtes pas dansbash
ou les guillemets simples ne font pas partie de l'adresse IP.repo
commandement.0 votes
Je ne suis pas sûr de comprendre, mais si les guillemets simples doivent être présents, repo forall -c "' ...before... "$variable" ...après...'" ne fonctionnerait-il pas ?
0 votes
C'est un bash script exécuté dans le shell bash et la commande repo forall prend des paramètres entre guillemets. Si je remplace la valeur réelle, la commande fonctionne bien.
0 votes
@Kevin. Non, il donne l'erreur suivante : 'before value after' : 'before value after' No such file or directory.
0 votes
Je me suis renseigné depuis. J'ai eu la chance d'avoir le repo qui traînait. Je ne sais toujours pas s'il est nécessaire de placer les commandes entre guillemets simples. J'ai regardé la syntaxe de repo et je ne pense pas que ce soit nécessaire. Vous pouvez utiliser des guillemets doubles autour de votre commande, puis utiliser les guillemets simples et doubles dont vous avez besoin à l'intérieur, à condition d'échapper aux guillemets doubles. Si vous pouviez me fournir le cas réel, je pense que je pourrais être d'une plus grande aide.
0 votes
BTW, vous l'exécutez peut-être à partir d'un shell bash/script, mais les commandes repo sont exécutées dans un shell sh, conformément à la documentation : "-c : commande et arguments à exécuter. La commande est évaluée à travers /bin/sh et tous les arguments après elle sont passés à travers comme des paramètres positionnels du shell." <- lien
0 votes
Une autre approche qui pourrait fonctionner serait de passer la variable nécessaire à l'exécution du repo, qui semble la diffuser avec succès dans les sh's créés. Comme ceci : variable=$variable ./repo forall -c 'blahblah $variable blahblah'. Les guillemets simples entourant la commande complète sont traités par repo, et $variable est réellement évalué.
0 votes
@Kevin : Oui, vous aviez raison. repo forall prend aussi les guillemets doubles au lieu des guillemets simples. Je suis stupide de ne pas l'avoir vérifié une fois. Merci pour votre aide. Si vous postez votre réponse, je l'accepterai comme correcte.
0 votes
@Kevin : J'ai également lu la documentation sur l'exécution et je pense que vous avez raison, mais je n'ai pas le temps de vérifier. Je vais utiliser des guillemets doubles. Merci beaucoup ! !!
0 votes
Voir : Différence entre les guillemets simples et doubles dans Bash .
0 votes
Et aussi plus largement Quand mettre des guillemets autour d'une variable shell ?