exécuter une commande stockée dans une variable bash

0

J'essaie donc de capturer l'adresse IP d'un invité Parallels VM (Win8) à partir de l'hôte (OS X). Je pensais qu'un script bash serait bon pour cela. Le but ultime est d’avoir une seule commande qui récupère l’adresse IP puis initie une redirection de port ssh.

Je suis au courant de la prlctl entercommande et je ne pense pas qu'elle prenne en charge la redirection de port.

Mon scénario à ce jour:

#!/bin/bash

VM="Win8 Dev"
CMD="prlctl exec \"$VM\" ipconfig | grep "IPv4" | grep -m1 -o '\d\{1,3\}\.\d\{1,3\}\.\d\{1,3\}\.\d\{1,3\}'"
echo $CMD
IP=$($CMD)
echo $IP

sortie:

prlctl exec "Win8 Dev" ipconfig | grep IPv4 | grep -m1 -o
'\d\{1,3\}\.\d\{1,3\}\.\d\{1,3\}\.\d\{1,3\}' Failed to get VM config:
The virtual machine could not be found. The virtual machine is not
registered in the virtual machine directory on your Mac. Contact the
Parallels support team for assistance.

Il semble donc que la variable CMD est correctement renseignée, mais quelque chose est en train de se perdre lorsque vous essayez d’affecter le résultat de la commande à la variable IP.

Des idées sur ce que je fais mal?

Sam Axe
la source
Si vous exécutez prlctl exec "Win8 Dev" ipconfigdirectement dans le shell, cela fonctionne-t-il correctement? Idem pour tout le contenu de $ CMD.
nohillside
Je pense que cela fonctionnerait si vous utilisiez eval ou simplement la commande telle quelle à la place de echo dans votre dernière ligne. cause echo affiche simplement le contenu de la variable et ne l’interprète pas.
Konqui
@konqui: l'avant-dernière ligne doit interpréter la variable $ CMD. IP=$($CMD)
Sam Axe
désolé de ma faute certains comment ont supervisé cette ligne.
Konqui

Réponses:

1

Si quelqu'un d'autre a besoin de faire cela, voici la solution que j'ai proposée:

#!/bin/bash

VM="name of my VM"
CMD="prlctl exec \"$VM\" ipconfig | grep "IPv4" | grep -m1 -o '\d\{1,3\}\.\d\{1,3\}\.\d\{1,3\}\.\d\{1,3\}'"
IP=$(eval $CMD)

#once you have the correct data in the $IP variable you can do something with it.. I initiate an ssh session, but you can do whatever you like.

Je ne sais pas pourquoi eval est nécessaire ici. Quelqu'un plus familier avec bash sera nécessaire pour répondre à ce mystère.

Sam Axe
la source