명령 출력을 Yad로 파이프하고 출력을 로그 파일에 기록합니다.

명령 출력을 Yad로 파이프하고 출력을 로그 파일에 기록합니다.

표시하려면 명령 프로세스(일반적으로 업데이트)가 필요합니다.마당또한 지정된 로그 파일 설정에 모든 출력을 기록합니다. 이 내 꺼야

apt-get update | yad --width=400 --height=300 \
--title="Updating debian package list ..." --progress \
--pulsate --text="Updating debian package list ..." \
--auto-kill --auto-close \
--percentage=10 

위 명령은 프로세스에 대한 하트비트 표시기를 생성하고 완료되면 닫히지만 시도한 모든 출력을 기록하도록 해야 합니다.

apt-get update >>${logfile} 2>&1 | yad --width=400 --height=300 \
--title="Updating debian package list ..." --progress \
--pulsate --text="Updating debian package list ..." \
--auto-kill --auto-close \
--percentage=10 

하지만 이로 인해 오류가 발생하고 대화 상자나 로깅도 없이 중단되고 그냥 정지됩니다. 이건 오류야

 GLib-CRITICAL **: g_source_remove: assertion `tag > 0' failed

도와 주셔서 감사합니다

답변1

오류는 모든 출력을 다음으로 리디렉션하므로 처리할 출력이 $logfile없기 때문에 발생합니다. yad당신이 찾고 있는 도구는 다음과 같습니다 tee:

NAME
       tee - read from standard input and write to standard output and files

SYNOPSIS
       tee [OPTION]... [FILE]...

DESCRIPTION
       Copy standard input to each FILE, and also to standard output.

따라서 다음과 같이 할 수 있습니다.

apt-get update 2>&1 | tee -a ${logfile} |
  yad --width=400 --height=300 \
    --title="Updating debian package list ..." --progress \
    --pulsate --text="Updating debian package list ..." \
    --auto-kill --auto-close \
    --percentage=10 

답변2

또 다른 가능성은 출력을 apt-get로그 파일로 지정하고, 이 프로세스를 백그라운드에서 실행한 다음, 다음을 yad사용하여 해당 로그 파일의 증가분을 진행률 표시줄이 있는 창으로 "사이펀"하는 것입니다 tail -f.

apt-get update > "$logfile" & tail -f "$logfile" | yad --width=400 --height=300 \
--title="Updating debian package list ..." --progress \
--pulsate --text="Updating debian package list ..." \
--auto-kill --auto-close \
--percentage=10

관련 정보