Je souhaite utiliser shell pour invoquer un script sur un serveur distant. Je voudrais capturer la sortie de ce script (ses messages de journalisation) et le code de sortie qu'il renvoie.
Si je fais ça:
ssh user@server /usr/local/scripts/test_ping.sh
echo "$?"
J'obtiens le code de sortie mais je ne peux pas capturer les messages de journalisation à distance.
Si je fais ça:
local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo "$?"
LOG "${RESULTS}";
J'arrive à enregistrer ma sortie à l'aide de ma fonction LOG mais je n'arrive pas à obtenir un code de sortie correct, je suppose que le code que j'obtiens est le code de l'affectation des variables.
Je voudrais continuer à utiliser ma fonction LOG pour capturer toutes les sorties au fur et à mesure qu'elles formatent et envoient des choses à un fichier, syslog et l'écran pour moi.
Comment puis-je capturer les résultats dans un var ET obtenir le code de sortie correct du script distant?
Réponses:
La raison pour laquelle vous n'obtenez pas le bon code d'erreur est qu'il
local
s'agit en fait de la dernière chose exécutée. Vous devez déclarer la variable comme locale avant d'exécuter la commande.Vous pouvez voir le problème ici:
la source
Le «local» semble être le problème. Cela fonctionne pour moi:
la source
En fait, aucune des réponses ci-dessus ne piège le code d'erreur et le message ssh, ce qui pourrait être fait comme suit (ignorer mes fonctions personnalisées):
la source