Une vérification alternative, moins "propre" mais plus proche de ce que la question tentait de réaliser.
Rappelez-vous qu’en [
son cœur n’est qu’une commande. Il accepte toujours un nombre spécifique de paramètres et quitte avec le statut de sortie 0 (succès) ou 1 (échec), comme le font toutes les autres commandes. Par exemple, lorsque vous comparez deux chaînes, la syntaxe est [
, chaîne 1, ==
, chaîne 2, ]
.
À l'heure actuelle, vous utilisez ceci comme if
condition:
[ prlctl list --info ubuntu-vm | grep State == "State: running" ]
Mais c'est ambigu à plusieurs égards. Comment [
savoir que sur la gauche vous avez une commande à exécuter et non une chaîne fixe? Comment pourrait-il savoir que l' ==
opérateur de comparaison de chaînes est plutôt qu'un simple argument grep
? Comment pourrait-il savoir que cela |
fait partie de la valeur de gauche plutôt que de séparer la commande en [ prlctl list --info ubuntu-vm
et grep State == "State: running" ]
?
Donc, le côté gauche doit également être cité. De plus, puisque vous voulez comparer le résultat de cette commande, plutôt que les "prctl list --info ..." des mondes eux-mêmes, vous avez besoin de l' $(…)
opérateur:
[ "$(prlctl list --info ubuntu-vm | grep State)" == "State: running" ]
prlctl list --info ubuntu-vm | grep -q "State: running" && echo "machine is running" || echo "machine is not running"