Как я вставляю команду в сценарий, расположенный на удаленном сервере?

Я хочу вставить rm $0 в сценарии (/home/user/config-script) расположенный на удаленном сервере с echo "rm $0" >> /home/user/config-script с expect. Но сбой, потому что ожидают, интерпретирует $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'

Какая-либо справка?Заранее спасибо.


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

На самом деле на удаленном сервере мне назвали файл "/home/user/config-script". Как это:

#!/bin/bash
echo "my script"

наконец, я хочу, чтобы этот сценарий был:

#!/bin/bash
echo "my script"
rm $0
1
задан 15 July 2013 в 20:53

1 ответ

var1="rm \$0" делает var1 возьмите значение rm $0. Затем expect попытки расшириться $0 когда Вы выполняете его.

Для решения проблемы не присваиваться var1 значение rm $0. Присвойте ему значение это expect расширится до rm $0:

var1="rm \\\$0"

(Или эквивалентно: var1='rm \$0')

Это делает var1 возьмите значение rm \$0 (который является, возможно, что Вы предназначили). Затем send "echo '$var1'>>/home/user/config-script\n"; оператор заставит корректную команду работать на удаленной машине:

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

Конечный результат был бы похож на следующее:

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
ответ дан 15 July 2013 в 20:53

Другие вопросы по тегам:

Похожие вопросы: