在背景啟動程式時 xdg-open 出現異常

在背景啟動程式時 xdg-open 出現異常

到目前為止,我一直使用 xdg-open 的別名。

alias o='xdg-open $@ 2> /dev/null'

xdg-open 的預設行為是在目前所選終端的前台啟動進程,因此開啟與 vim 關聯的檔案(透過 xdg-mime)會導致在輸入命令的終端機中開啟編輯器。

問題是,雖然打開基於終端的程式(如 mutt 和 vim)工作正常,但例如 .html 檔案在預設瀏覽器中打開,而我的終端視窗變得不可用,因為進程在前台運行並等待檔案關閉。

我創建了下面的函數,以便我可以從當前使用的終端打開文件,並且仍然能夠在同一視窗中工作。

function o(){ xdg-open $@ 2> /dev/null & }

它解決了我的問題,但現在打開例如與 vim 關聯的檔案會導致向我顯示 PID,並且我必須輸入 $ fg 才能存取編輯器。

我嘗試編輯 vim.desktop 條目,以便它至少可以在新終端機中啟動,但我認為這是一個非常糟糕的解決方法。有人可以告訴我如何正確解決這個問題嗎?先感謝您。

答案1

xdg-open旨在運行檢視器程式並等待其完成。它不是為在後台運行而設計的,而且正如您所發現的,它不太可能工作得很好。對於舊的 mailcap 系統也會遇到相同的問題,它也在前台執行程式。

可以將 shell 函數變更為始終在新終端機中打開,但這可能會導致您擁有大量無用的終端。為了使你的函數更有用並且更像你想要的那樣工作,你可以做的是這樣做:

o () {
    for i in "$@"
    do
        mimetype=$(xdg-mime query filetype "$i")
        prog=$(xdg-mime query default "$mimetype")
        if grep -qs Terminal=true "/usr/share/applications/$prog"
        then
            xdg-open "$i"
        else
            xdg-open "$i" >/dev/null 2>/dev/null &
        fi
    done
}

這將查看您的程式是否需要終端,如果需要,將在前台呼叫它;否則,它將在後台調用它。但是,目前它不處理 URL 或自訂應用程序,您需要對其進行適當編輯以使您的系統能夠處理這些問題。儘管如此,它仍然是您可以繼續發展的起點。

相關內容