Estoy escribiendo un script Expect y estoy teniendo problemas para tratar con el intérprete de comandos del shell (en Linux). La secuencia de comandos Mi Esperanza genera rlogin
y el sistema remoto está usando ksh
. La solicitud en el sistema remoto contiene el directorio actual seguido de " > "
(espacio mayor que espacio). Un fragmento de secuencia de comandos podría ser:¿Cómo puedo vaciar el búfer de entrada en un script esperado?
send "some command here\r"
expect " > "
Esto funciona para comandos simples, pero las cosas empiezan a ir mal cuando el comando que estoy enviando supera el ancho de la terminal (o más precisamente, lo que ksh
piensa que es el ancho de la terminal). En ese caso, ksh
hace un extraño desplazamiento horizontal de la línea de comando interactiva, que parece reescribir el mensaje y colocar un ">" extra en el resultado. Naturalmente, esto provoca que la secuencia de comandos Expect se confunda y se desincronice cuando parece haber más de un aviso en la salida después de ejecutar un comando (mi script contiene varios pares de send
/expect
).
He intentado cambiar PS1
en el sistema remoto a algo más distintivo como "prompt>", pero surge un problema similar que me indica que esa no es la manera correcta de resolver esto.
Lo que estoy pensando que podría ayudar es la capacidad de la secuencia de comandos para decirle Esperar que "Sé que estoy sincronizado correctamente con el sistema remoto en este momento, así que vacíe el búfer de entrada ahora". La instrucción expect
tiene el indicador -notransfer
que no elimina el búfer de entrada, incluso si el patrón no coincide, por lo que creo que necesito lo contrario.
¿Existen otras técnicas útiles que pueda utilizar para hacer que el shell remoto se comporte de manera más predecible? Entiendo que Expect realiza mucho trabajo para asegurarse de que la sesión generada aparezca como para que sea interactivo con el sistema remoto, pero prefiero algunas de las funciones interactivas más molestas (como el desplazamiento horizontal de ksh
) ser apagado
Excelente, eso parece ser justo lo que necesitaba. –