Bash

管道命令輸出到 Yad 並將輸出記錄到日誌文件

  • March 5, 2015

需要讓命令過程通常使用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

幫助表示讚賞

該錯誤是因為您將所有輸出重定向到,$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 

引用自:https://unix.stackexchange.com/questions/188383