2016-04-19 4 views
-1

Je suis en train de récupérer le retour de code de ce script:code de sortie de la commande ssh

#!/bin/bash 
echo "CM 1" 
ssh -i key/keyId.ppk [email protected] " 
grep blabla ddd 
if [ ! $? -eq 0 ]; then exit 1; fi 
" 
echo $? 

Mais la dernière commande echo $? retours 0 au lieu de 1.

Et si essayez d'exécuter séparément (non pas comme un script):

  • la commande ssh: ssh -i key/keyId.ppk [email protected]
  • grep blabla ddd => Je reçois le msg « grep: ddd: Aucun fichier ou répertoire "
  • puis: si [! $? -eq 0]; puis quittez 1; fi
  • alors: echo $? => il renvoie 1 comme prévu

Avez-vous une idée pourquoi cela ne fonctionne pas dans mon script?

Merci

+0

qu'est-ce que cela signifie "retourne rien"? Quelle version utilisez-vous? Ça fonctionne bien pour moi. – Jakuje

+0

Quelle est la raison de l'utilisation de '-t'' ssh'? –

+0

@Rany Albeg Wein: il n'y avait pas de raison particulière pour le -t – bbenjii123

Répondre

1

Ce code

ssh -i key/keyId.ppk [email protected] " 
grep blabla ddd 
if [ ! $? -eq 0 ]; then exit 1; fi 
" 

évalue $? dans votre coquille et non pas dans une distance, parce que le $ est pas échappé à des guillemets simples. Vous devriez échapper à cela pour atteindre le comportement désiré. Une fois pour éviter l'évaluation dans votre shell local, pour la deuxième fois pour éviter l'évaluation quand elle est passée à la bash sur le côté distant. Ou plutôt mettre la commande en guillemets simples:

ssh -i key/keyId.ppk [email protected] ' 
grep blabla ddd 
if [ ! $? -eq 0 ]; then exit 1; fi 
' 
+1

Aussi, comparer un statut de sortie à 0 est ce que la commande 'if' fait déjà! Vous n'avez pas besoin d'utiliser '[' et '$?'. "si! grep blabla ddd' est équivalent. –

+0

@ WumpusQ.Wumbley True. Mais je ne voulais pas gâcher son algorithme :) – Jakuje

+0

Cela fonctionne, merci pour votre aide! – bbenjii123