2012-09-28 3 views
0

J'utilise le code suivant pour lancer une commande sur une autre machine:Obtenir PID de la dernière commande Exécuter sur Autre machine

#!/bin/bash 
/usr/bin/rsh -n $Host_Name "cat asdf.txt &" 

Et je suis en train d'obtenir le PID de la commande cat en utilisant les éléments suivants:

/usr/bin/rsh -n $Host_Name pid="$!" 

Mais quand j'echo $ pid, il est tout simplement vide. Que fais-je incorrectement? Y at-il un moyen plus facile d'obtenir le PID de la dernière commande qui a été exécutée sur une machine différente?

Merci

+0

Je pense qu'il y a quelques problèmes (mais je peux me tromper). Premièrement, chaque invocation de rsh devrait probablement engendrer un nouveau shell à distance, ce qui signifie que $! La variable ne sera pas définie dans le nouveau shell et la variable du shell précédent sera perdue. Deuxièmement, d'après la syntaxe que vous utilisez, IIRC vous demande à votre shell local de définir pid comme $ local! avant d'exécuter la commande rsh. Vous devriez probablement faire quelque chose comme 'pid = $ (/ usr/bin/rsh -n $ nom_hôte 'echo $!')', Mais rappelez-vous que cela retournera également vide s'il génère une nouvelle instance shell distante. –

Répondre

2

Vous ne pouvez obtenir que le $! de la commande d'arrière-plan dans le shell dans lequel vous avez lancé la commande. Si votre commande ne rien à stderr sortie, cela pourrait fonctionner:

/usr/bin/rsh -n $Host_Name "cat asdf.txt & echo $! >&2" 2> pidfile 

Le pid de la commande commencé sera alors stocké localement dans « pidfile ».

Juste un petit mot: je n'utiliserais jamais rsh. C'est intrinsèquement non sécurisé. J'utiliserais plutôt ssh;)

Questions connexes