Я хочу вставить 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
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'