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