2010-08-25 2 views
0

J'écris un script shell simple qui récupère la sortie d'une commande et l'utilise dans une autre.en utilisant une sortie de commande de script shell

app=$(./twiddle.sh -u $1 -p $2 query jboss.web.deployment:* | grep $3) 
doop=$(./twiddle.sh -u $1 -p $2 invoke jboss.system:MainDeployer $4 $app) 

++ ./twiddle.sh -u admin -p mot de passe jboss.system appeler: MainDeployer arrêter $ 'jboss.web.deployment: guerre = worker.war, id = 1518231766 \ r'

que je vois dans les commandes ci-dessus que l'application vient de la valeur:

$'jboss.web.deployment:war=worker.war,id=1518231766\r' 

Mais si je fais écho app $, alors je ne vois pas les guillemets et \ r ajoutée, Comment puis-je assurer l'application est envoyée sans guillemets comme une entrée à une autre commande? Je ne suis pas sûr où le problème est - je ne peux pas voir cela comme la sortie lorsque j'exécute les commandes en dehors de shell.

Merci pour toute aide.

Répondre

0

sed ne fonctionnera bien pour cela:

sh -u $1 -p $2 query jboss.web.deployment:* | grep $3 | sed 's/\'//g' | sed 's/\r//g' 
+0

Cela a fonctionné en faisant cela : app = 'echo $ app | sed 's/\ r // g'' – Anna

+0

content que vous ayez travaillé .... – ennuikiller

+0

'motif grep | sed/s/from/to/g'' n'est pas souvent nécessaire, car sed a un grep intégré: 'sed -ne '/ pattern/s/from/to/gp'' enregistre souvent une fourchette. Et sed peut même faire plusieurs substitutions en sauvant encore une autre fourchette ... – Jens

0
doop=$(./twiddle.sh -u $1 -p $2 invoke jboss.system:MainDeployer $4 "$app") 

Vous devez utiliser echo avec des guillemets si vous ne voulez pas que le contenu soit interprété par le shell. Si vous ne voulez pas des personnages comme ' être interprétés aussi, l'utilisation printf: printf '%s' "$app"

+0

Aucun ajout de citations ne retiraient pas le problème. – Anna

+0

Avez-vous essayé la deuxième chose, avec printf? doop = $ (./ twiddle.sh -u $ 1 -p $ 2 invoquer jboss.system: MainDeployer $ 4 "' 'printf '% s'" $ app "' '") – Lekensteyn