Como inserir um comando em um script localizado em um servidor remoto?

1

Eu quero inserir rm $0 em um script ( /home/user/config-script ) localizado no servidor remoto com echo "rm $0" >> /home/user/config-script com expect . Mas falhe porque espere que interprete $0 .

var1="rm \
missing "
    while executing
"send "echo rm"
couldn't read file "\
#!/bin/bash
echo "my script"
>>/home/user/config-script\n"; expect "@"; send "exit\n"; send "logout\n"; interact": no such file or directory
" expect -c 'spawn ssh [email protected] ;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'

Qualquer ajuda? Agradecemos antecipadamente.

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

Na verdade, no servidor remoto eu tenho um arquivo chamado "/ home / user / config-script". Assim:

var1="rm \
missing "
    while executing
"send "echo rm"
couldn't read file "\
#!/bin/bash
echo "my script"
>>/home/user/config-script\n"; expect "@"; send "exit\n"; send "logout\n"; interact": no such file or directory
" expect -c 'spawn ssh [email protected] ;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'

finalmente, quero que este script seja:

#!/bin/bash
echo "my script"
rm $0
    
por georgian 09.01.2013 / 10:47

1 resposta

2

var1="rm \var1" faz com que rm $0 assuma o valor expect . Então $0 tenta expandir o var1 quando você o executa.

Para resolver o problema, não atribua rm $0 ao valor expect . Atribuir um valor que rm $0 expandirá para var1='rm \var1' :

var1="rm \\
echo 'rm $0'>>/home/user/config-script
"

(Ou equivalentemente: rm \send "echo '$var1'>>/home/user/config-script\n"; )

Isso faz com que %code% assuma um valor de %code% (que é talvez o que você pretendia). Em seguida, a instrução %code% fará com que o comando correto seja executado na máquina remota:

var1='rm \\
var1="rm \\
echo 'rm $0'>>/home/user/config-script
"
' expect -c 'spawn ssh [email protected] ;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'

O resultado final seria semelhante ao seguinte:

var1='rm \\%pre%'
expect -c 'spawn ssh [email protected] ;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'
    
por Eliah Kagan 09.01.2013 / 12:00