Как сделать так, чтобы оператор Expect не выводил stdout первой команды?

Как сделать так, чтобы оператор Expect не выводил stdout первой команды?

Я пытаюсь выполнить команду ssh, которая выводит /etc/shadowфайл. Очевидно, что этот файл требует root или sudoразрешения, а у меня нет прав root, поэтому мне приходится использовать sudo.

Вот команда, которую я разработал:

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

Он выводит именно то, что мне нужно, но также выводит запрос на ввод пароля sudo в первой же строке:

[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:::

Есть ли способ изменить команду expectтак, чтобы она выводила только вывод команды cat, а не [sudo] password for student99:приглашение, не используя другие программы (например, grep, awk, tail и т. д.)?

Решение:
Благодаря @larsks, моя окончательная рабочая команда выглядит так:

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'

решение1

Вы можете отключить ведение журнала выходных данных, установив log_user 0. Отдокументы:

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. 

Связанный контент