Exécuter une commande shell après avoir attendu la connexion

J’essaie de dépasser une commande après m’être connecté à une boîte Linux RHEL en utilisant expect et interagir . Ci-dessous le script

#!/usr/bin/expect set timeout 100 set temp [lindex $argv 0] spawn ssh [email protected] expect "Password:" send "password\n"; interact expect "*3.2*" send "./p.sh\n"; 

C’est réussi à se connecter à la boîte, mais après cela, il n’exécute pas la commande.

Ceci est la sortie réelle de la commnad après la connexion, ce que iam essaye d’excuser.

 Using keyboard-interactive authentication. Password: Last login: Sun Mar 22 11:04:01 2015 from com -sh-3.2$ pbrun pbapp wasapp=ksh Please note home directories are intended only for user/application profiles. $ 

Ce sont les erreurs que j’ai reçues

 -sh-3.2$ exit logout Connection to 10.20.30.40 closed. expect: spawn id exp7 not open while executing "expect "*$"" (file "./testWas.sh" line 8) 

quand j’essaye de m’attendre à “* $” exec “pwd”

 -sh-3.2$ exit logout Connection to 10.20.30.40 closed. couldn't execute " pwd ": no such file or directory while executing "exec { pwd }" (file "./testWas.sh" line 8) 

Edit: Merci à @glenn jackman iam rouge capable d’exécuter les commandes pbrun après la connexion ..

Mais après l’exécution du script de commande pbrun se ferme

  #!/usr/bin/expect set timeout 100 set host [lindex $argv 0] set username [lindex $argv 1] set password [lindex $argv 2] set command [lindex $argv 3] spawn ssh $username@$host expect "Password:" send "$password\n"; expect -re {\$ $} ; # put here ssortingng from your server prompt send "./p.sh\n"; expect -re {\$ $} ; send "pwd\n"; 

Ceci est le contenu de p.sh Seule la première ligne du script est en cours d’exécution.

 -sh-3.2$ cat p.sh pbrun pbapp wsapp=ksh pwd clear -sh-3.2$ 

Une question similaire rest sans réponse. Comment exécuter la commande “pbrun pbapp wasapp = ksh” en utilisant le client SSH java?

interact indique que vous allez passer en mode manuel, où vous, l’homme, contrôlez la commande générée. Je vous vois alors tapé exit qui a mis fin à la session ssh. Depuis la fin de la commande générée, la commande interact s’est terminée et le contrôle est revenu au script. La commande suivante meurt car la commande générée n’est pas en cours d’exécution.

En termes simples, supprimez l’ interact :

 #!/usr/bin/expect set timeout 100 set temp [lindex $argv 0] spawn ssh [email protected] expect "Password:" send "password\r" # a carriage return more exactly represents # "hitting enter" expect -re {\$ $} # this regular expression matches the end of the prompt send "./p.sh\r" if { you want to interact manually with the ssh session } { interact } else { expect -re {\$ $} # if p.sh exits the ssh session, remove this line send "exit\r" # and this one too. expect eof }