Question Comment insérer une commande dans un script situé sur un serveur distant?


Je veux insérer rm $0 dans un script (/home/user/config-script) situé sur le serveur distant avec echo "rm $0" >> /home/user/config-script avec expect. Mais échouer car attendre interprète $0.

var1="rm \$0"
expect -c 'spawn ssh user@192.168.1.200 ;expect "password" ; send "123456\n"; \
  expect "@"; send "sudo -k\n"; expect "@"; send "sudo su\n"; expect "password" ; \
  send "123456\n" ;expect "@"; send "echo '$var1'>>/home/user/config-script\n"; \
  expect "@"; send "exit\n"; send "logout\n"; interact'

De l'aide? Merci d'avance.


missing "
    while executing
"send "echo rm"
couldn't read file "\$0>>/home/user/config-script\n"; expect "@"; send "exit\n"; send "logout\n"; interact": no such file or directory

En fait, sur le serveur distant, j'ai un fichier appelé "/ home / user / config-script". Comme ça :

#!/bin/bash
echo "my script"

Enfin, je veux que ce script soit:

#!/bin/bash
echo "my script"
rm $0

1
2018-01-09 09:47


origine




Réponses:


var1="rm \$0" fait du var1 prendre la valeur rm $0. alors expect essaie d'élargir le $0 quand vous l'exécutez

Pour résoudre le problème, n'attribuez pas var1 la valeur rm $0. Attribuez-lui une valeur qui expect étendra à rm $0:

var1="rm \\\$0"

(Ou équivalent: var1='rm \$0')

Cela fait var1 prendre une valeur de rm \$0 (ce qui est peut-être ce que vous aviez prévu). Puis le send "echo '$var1'>>/home/user/config-script\n"; l'instruction entraînera l'exécution de la commande correcte sur la machine distante:

echo 'rm $ 0'>>/home/user/config-script

Le résultat final ressemblerait à ceci:

var1='rm \\\$0'
expect -c 'spawn ssh user@192.168.1.200 ;expect "password" ; send "123456\n"; \
      expect "@"; send "sudo -k\n"; expect "@"; send "sudo su\n"; expect "password" ; \
      send "123456\n" ;expect "@"; send "echo '"$var1"'>>/home/user/config-script\n"; \
      expect "@"; send "exit\n"; send "logout\n"; interact'

2
2018-01-09 11:00



J'ai posté ci-dessous pour que je puisse utiliser le <code> - georgian
@georgian Je suppose que cela signifie que la "réponse" que vous avez affichée est une réponse à cette question, détaillant les erreurs survenues lorsque vous avez essayé la méthode que j'ai proposée. (Soit dit en passant, au lieu de poster une réponse - sauf si vous avez vraiment trouvé la solution - vous devriez plutôt modifier votre question. Vous pouvez toujours commenter les réponses pour en informer leurs auteurs, comme vous l'avez fait ici.) allez jeter un coup d'oeil ... - Eliah Kagan
vous avez supposé correctement. - georgian
problème résolu. var1 = 'rm \\\ $ 0' et envoyer "echo" "$ var1" '. - georgian