如何讓我的期望語句不輸出第一個指令的標準輸出?

如何讓我的期望語句不輸出第一個指令的標準輸出?

我想做的是執行一個列印出/etc/shadow檔案的 ssh 指令。顯然該文件需要 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:::

在不使用其他程式(如 grep、awk、tail 等)的情況下,有沒有辦法修改命令expect,使其只列印 cat 命令的輸出而不是提示符號[sudo] password for student99:

解決方案:
感謝@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. 

相關內容