J'essaie d'aller chercher un seul fichier de Git. Lorsque j'exécute ma commande git avec la valeur codée du code papier, cela fonctionne. Cependant, quand je l'exécute avec une variable, il se casse. Je soupçonne que cela est dû aux devis doubles placés autour de ma variable d'une manière ou d'une autre. J'ai essayé de nombreuses commandes de retirer les citations doubles de la chaîne et aucun d'entre eux ne semble fonctionner.
J'essaie essentiellement d'utiliser la variable FilePath dans ma commande git sans doubles citations autour de lui. P>
#!/usr/bin/env bash #reads the JSON value of the file-path key. #file path key is "home/docs" (quotes included) filePath=$(grep -o '"file-path": *"[^"]*"' ../package.json | grep -o '"[^"]*"$') git archive --remote=git@git.SOME_URL.com:help/docs.git HEAD $filePath | tar -x
3 Réponses :
Ce qui suit fonctionnera:
filePath=$(grep -o '"file-path": *"[^"]*"' ./package.json | cut -d: -f2 | tr -d ' "')
Ceci fonctionne: donc dans votre cas: p> Vous devez citer la clé car elle contient un trait d'union. < / p> p>
J'ai rencontré le problème récemment que Bash ne supprime que des citations qui n'entraînaient pas d'une expansion variable. Donc, pour obtenir BASH pour supprimer des guillemets doubles dans une chaîne d'utilisation Eval Pour traiter la chaîne après l'expansion de la variable:
foo=\"abc\"\ \"def\" echo $foo "abc" "def" eval echo $foo abc def
Arrêtez d'utiliser
grep code> pour analyser JSON. Utilisez un outil tel que
JQ code> qui est conçu i> pour JSON et sait comment produire la chaîne brute que vous voulez.
FilePath = $ (JQ -R '.FILE_PATH' ../ package.json) code>.
Le dernier grep
grep -o '[^ "] *' code>. N'incluez pas les devis si vous n'en avez pas besoin