Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Code retour rsh

2 réponses
Avatar
David LE BOURGEOIS
Bonjour,

Je souhaiterai savoir comment obtenir le code retour d'une commande
soumise par rsh. Par exemple :

$ rsh serveur -l user "false ; echo $?"
0
$ echo $?
0

Le $? vaut 0 après l'exécution du rsh. C'est normal la commande a bien
été transmise. Mais pour le code retour du false, je ne comprend pas.
Pourtant en local un "false ; echo $?" me retourne 1.

Le seule moyen que j'ai trouvé est de parser le code retour avec un
echo RC=n. Mais ça oblige à modifier tous les scripts utilisés par rsh.

Par exemple voici le script à exécuter à distance, par rsh :

$ cat script
#!/bin/sh

false
case $? in
0) echo "Tout baigne." ; echo "RC=0" ; exit 0 ;;
1) echo "Houlà !" >&2 ; echo "RC=1" ; exit 1 ;;
*) echo "Houlà : pas bien" >&2 ; echo "RC=$?" ; exit $? ;;
esac

Mais je suis obliger de parser le résultat pour avoir le code retour :

$ RC=$(rsh serveur -l user "script" | awk -F= '/RC=/ {print $2}')


N'existe-t-il pas une option dans rsh pour ecraser son code retour par
celui de la commande exécutée à distance ?

Merci pour votre aide,
David.

2 réponses

Avatar
Stephane CHAZELAS
Le Sat, 23 Aug 2003 11:37:18 +0200, David LE BOURGEOIS écrivait :
[...]
$ rsh serveur -l user "false ; echo $?"
0
$ echo $?
0

Le $? vaut 0 après l'exécution du rsh. C'est normal la commande a bien
été transmise. Mais pour le code retour du false, je ne comprend pas.
Pourtant en local un "false ; echo $?" me retourne 1.


rsh serveur -l user "false ; echo $?"

ou c'est le $? du shell local qui serait substitué. Vaut
généralement mieux utiliser des single quotes pour du code
shell:

rsh serveur -l user 'false ; echo $?'


Le seule moyen que j'ai trouvé est de parser le code retour avec un
echo RC=n. Mais ça oblige à modifier tous les scripts utilisés par rsh.
[...]

N'existe-t-il pas une option dans rsh pour ecraser son code retour par
celui de la commande exécutée à distance ?


Non, tu trouveras probablement plusieurs FAQ sur le sujet
avec des solutions pour arriver à tes fins.

Tu peux utiliser le fait que rsh ouvre deux canaux en sortie (1
pour stdout, un pour stderr).

Si tu fais:

{
rc=$(rsh remote-host '
commande à executer 2>&1
echo $? >&2
' 2>&1 >&3 3>&-
)
} 3>&1

stderr alors est réservé à la transmission du code de retour.
Par contre, les sortie standard et d'erreur de la commande sont
mélangées. Tu peux mettre ça dans une fonction:

rsh() {
{
return $(command rsh "$@" '2>&1
echo $? >&2
' 2>&1 >&3 3>&-)
} 3>&1
}

(pas testé)

--
Stéphane

Avatar
David LE BOURGEOIS
Stephane CHAZELAS wrote:
Le Sat, 23 Aug 2003 11:37:18 +0200, David LE BOURGEOIS écrivait :
[...]

$ rsh serveur -l user "false ; echo $?"
0
$ echo $?
0

Le $? vaut 0 après l'exécution du rsh. C'est normal la commande a bien
été transmise. Mais pour le code retour du false, je ne comprend pas.
Pourtant en local un "false ; echo $?" me retourne 1.



rsh serveur -l user "false ; echo $?"

ou c'est le $? du shell local qui serait substitué. Vaut
généralement mieux utiliser des single quotes pour du code
shell:

rsh serveur -l user 'false ; echo $?'


Effectivement, c'est beaucoup mieux.



Le seule moyen que j'ai trouvé est de parser le code retour avec un
echo RC=n. Mais ça oblige à modifier tous les scripts utilisés par rsh.


[...]

N'existe-t-il pas une option dans rsh pour ecraser son code retour par
celui de la commande exécutée à distance ?



Non, tu trouveras probablement plusieurs FAQ sur le sujet
avec des solutions pour arriver à tes fins.


OK, je lance mes recherches.


Tu peux utiliser le fait que rsh ouvre deux canaux en sortie (1
pour stdout, un pour stderr).

Si tu fais:

{
rc=$(rsh remote-host '
commande à executer 2>&1
echo $? >&2
' 2>&1 >&3 3>&-
)
} 3>&1

stderr alors est réservé à la transmission du code de retour.
Par contre, les sortie standard et d'erreur de la commande sont
mélangées. Tu peux mettre ça dans une fonction:

rsh() {
{
return $(command rsh "$@" '2>&1
echo $? >&2
' 2>&1 >&3 3>&-)
} 3>&1
}

(pas testé)



C'est une bonne idée de jouer avec les différentes soties. Je vais
creuser la question, car ça m'intéresse.


Et bien, merci pour ces solutions.