Wie erreiche ich, dass meine Expect-Anweisung nicht die Standardausgabe des ersten Befehls ausgibt?

Wie erreiche ich, dass meine Expect-Anweisung nicht die Standardausgabe des ersten Befehls ausgibt?

Ich versuche, einen SSH-Befehl auszuführen, der die /etc/shadowDatei ausdruckt. Offensichtlich erfordert diese Datei Root- oder sudoBerechtigungsrechte, und ich habe keine Root-Anmeldeinformationen, daher muss ich verwenden sudo.

Hier ist der Befehl, den ich ausgearbeitet habe:

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

Es gibt genau das aus, was ich brauche, aber es gibt in der allerersten Zeile auch die Eingabeaufforderung für das Sudo-Passwort aus:

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

Gibt es ohne die Verwendung anderer Programme (wie grep, awk, tail usw.) eine Möglichkeit, den expectBefehl so zu ändern, dass nur die Ausgabe des Cat-Befehls und nicht die [sudo] password for student99:Eingabeaufforderung ausgedruckt wird?

Lösung:
Dank @larsks lautet mein endgültiger funktionierender Befehl:

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'

Antwort1

Sie können die Ausgabeprotokollierung deaktivieren, indem Sie Folgendes einstellen log_user 0.die Dokumente:

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. 

verwandte Informationen