espera script para suportar dois caracteres esperados

3

Eu quero executar o sshd restart no Linux e na máquina Solaris via expect (minha expectativa é executada no meu script ksh)

Eu criei o script esperado então quando esperamos ver o prompt "#" ele executa o sshd restart

mas o problema é que eu executo isso, também espero em solars e o prompt lá é ">" Então, como criar uma linha de espera que suporte "#" e ">" prompt

no linux

    expect #                {send "/etc/init.d/sshd restart\r"}

solaris

   expect >                {send "/etc/init.d/sshd restart\r"}
    
por yael 05.09.2012 / 11:43

2 respostas

3

Use um padrão glob: expect {[#>]}

ou um regexp: expect -re {#|>} - o padrão regexp pode ficar mais elaborado. Eu recomendo que você ancore prompt de correspondência para o final da linha. Muitas vezes, os prompts terminam com um espaço, então você pode:

expect -re {[#>] ?$}
    
por 05.09.2012 / 13:50
0

Você poderia colocar isso em uma instrução if verificando a saída de uname -s ou verificando a saída de:

cat /etc/release

cat /etc/redhat-release

cat /etc/lsb-release

E use algo como:

if [[ $(uname -s) == "Linux" ]];then
   expect #  {send "/etc/init.d/sshd restart\r"}
else
   expect >  {send "/etc/init.d/sshd restart\r"}
fi

Eu não usei o ksh por alguns anos, então desculpe se a sintaxe está errada!

    
por 05.09.2012 / 12:15