예상 문이 첫 번째 명령의 표준 출력을 출력하지 않도록 하려면 어떻게 해야 합니까?

예상 문이 첫 번째 명령의 표준 출력을 출력하지 않도록 하려면 어떻게 해야 합니까?

내가 하려는 것은 파일을 인쇄하는 ssh 명령을 실행하는 것입니다 /etc/shadow. 분명히 해당 파일에는 루트 또는 sudo권한이 필요하며 루트 자격 증명이 없으므로 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다른 프로그램(grep, awk, tail 등과 같은)을 사용하지 않고 프롬프트 가 아닌 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. 

관련 정보