Noções básicas sobre echo / spawn / send / expect construct

1

Aqui está uma linha de um script que estou tentando entender:

echo "spawn myscript.sh arg1 arg2; expect \"Please enter your value: \"; send \"myval\r\"; expect eof" | expect

Acho que entendo o primeiro expect e o send .

Q1: O expect funciona apenas com spawn ?

Q2: Qual é o objetivo da última espera após o pipe?

Q3: Em geral, você consegue adivinhar o que o autor original desta linha estava tentando realizar?

    
por amphibient 07.01.2014 / 17:57

2 respostas

4

Q1: O objetivo de esperar é automatizar programas interativos. Para iniciar o programa e interagir com ele, use o comando spawn .

Q2: a última espera após o pipe é o esperado binário. Se não for dado um argumento de arquivo, ele lê seu stdin para fazer com que o script seja executado.

Q3: o autor queria um mecanismo para passar automaticamente um valor quando o script solicitar um. É isso.

Eu suspeito strongmente (dependendo do que o myscript.sh faz) que você não precisa esperar:

echo "myval" | myscript.sh arg1 arg2
    
por 07.01.2014 / 18:17
2

Q1: não sou um usuário expect , mas parece claro que spawn executa um script em segundo plano e o torna controlável por expect , em vez de apenas executar sem interatividade.

Q2: a string é passada como um script para expect . Eu assumo, como a maioria das linguagens de script, isso equivale a salvar a string em um arquivo e executar expect file .

Q3: parece um teste para ver que myscript.sh , quando executado, imprime uma mensagem e responde a um valor fornecido pelo usuário saindo sem imprimir nada.

Em outras palavras, espero que você consiga executar esse script com o mesmo resultado:

#!/usr/bin/expect
spawn myscript.sh arg1 arg2 # Run 'myscript.sh arg1 arg2' and return control to 'expect'
expect "Please enter your value: " # Succeeds if the script prints this value
send "myval\r" # Simulate entering this value
expect eof # Succeeds if the script ends without printing anything
    
por 07.01.2014 / 18:03