Como faço para que minha instrução expect não produza o stdout do primeiro comando?

Como faço para que minha instrução expect não produza o stdout do primeiro comando?

O que estou tentando fazer é executar um comando ssh que imprima o /etc/shadowarquivo. Obviamente esse arquivo requer root ou sudopermissão, e eu não tenho credenciais de root, portanto tenho que usar sudo.

Aqui está o comando que eu desenvolvi:

expect -c 'spawn -noecho ssh -q -t -S /tmp/t2.ssh dummy "sudo cat /etc/shadow";expect "assword"; send "password99\r";interact'

Ele exibe exatamente o que eu preciso, mas também exibe o prompt da senha do sudo na primeira linha:

[sudo] password for student99:
root:$x$xxx:18029:0:99999:7:::
daemon:*:17575:0:99999:7:::
bin:*:17575:0:99999:7:::
sys:*:17575:0:99999:7:::
sync:*:17575:0:99999:7:::

Sem usar outros programas (como grep, awk, tail, etc), existe uma maneira de modificar o expectcomando para que ele imprima apenas a saída do comando cat e não o [sudo] password for student99:prompt?

Solução:
Graças a @larsks, meu comando de trabalho final é:

expect -c 'spawn -noecho ssh -q -t -S /tmp/t2.ssh dummy "sudo cat /etc/shadow";log_user 0;expect "assword"; send "password99\r";interact'

Responder1

Você pode desativar o log de saída configurando log_user 0. Deos documentos:

log_user -info|0|1
    By default, the send/expect dialogue is logged to stdout (and a logfile if
    open). The logging to stdout is disabled by the command "log_user 0" and
    reenabled by "log_user 1". Logging to the logfile is unchanged.

    The -info flag causes log_user to return a description of the most recent
    non-info arguments given. 

informação relacionada