檔案管理器 (Thunar) 視窗關閉後執行命令

檔案管理器 (Thunar) 視窗關閉後執行命令

我正在編寫一個簡單的腳本,我需要dirname使用 Thunar 打開一個目錄,並在關閉 Thunar 視窗後刪除該目錄。我期待類似的事情

thunar $dirname && rm -r $dirname

上班。

問題是該thunar進程在啟動後似乎沒有保持與終端的連線:運行後thunar $dirname,shell 直接轉到下一個命令,而不是等待視窗thunar關閉。我該如何解決這個問題?

答案1

有一個 Thunar 進程已經使用「--daemon」選項運行,因此任何新的 Thunar 呼叫都會使用該進程,並且您嘗試啟動新的 Thunar 進程會失敗,並且 rm 會立即運行。請注意,「Thunar --daemon」本身確實如此不是開啟 Thunar 視窗。

守護程式通常根據 /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml(“/etc”,而不是“~”)中的定義在登入時啟動。刪除那裡的「--daemon」標誌將影響不希望等待 Thunar 關閉的現有腳本,並且如果您從那裡啟動 Thunar,它將阻止您的命令列。

您可以在相關腳本行之前使用 來「殺死」Thunar 守護程序Thunar -q,運行該行,並在其後重新啟動守護程序Thunar --daemon &- 請注意&最後的 來在後台啟動守護程序,否則您的腳本將等待它結束) 。警告:所有在您「殺死」的 Thunar 守護程式上開啟的 Thunar 視窗都會消失,恕不另行通知。

所以你的完整線路可能是

Thunar -q && thunar $dirname && rm -r $dirname && Thunar --daemon &

你可以看看Thunar 的線上說明頁

答案2

當已經有一個 Thunar 程序正在運行(桌面管理器或另一個視窗)時,一個新的 Thunar 視窗將從呼叫進程中分離出來,並啟動下一個命令,並且沒有pid針對特定視窗的命令。 hh skladby 的回答對此做了很好的描述。

我想在不關閉已經啟動的 Thunar 進程的情況下解決問題。

[單獨使用pid]似乎很難,但是有一個wid(視窗ID),可以透過wmctrl -lp(結合一些智慧邏輯)找到。讓 shellscript 檢查它(在循環中重複),當它wid消失時,您可以刪除該目錄。

以下 shell 腳本展示如何完成它。它只是一個演示腳本,因為除了解決問題中指定的問題之外沒有其他操作。

#!/bin/bash

if [ "$1" == "" ]
then
 echo "No directory on command line"
 dirname="MyDir"
else
 dirname="$1"
fi
mkdir -p "$dirname"
if [ $? -ne 0 ]
then
 echo "Bad directory name, try again"
 exit 1
fi

thunar "$dirname"

pid=$(ps -e | grep -i thunar | sed -e 's/ *//' -e 's/ .*//')
#echo "$pid"
sleep 1
wid=$(wmctrl -lp | grep " $pid " | grep "${dirname##*/}" | tail -n1)
wid=$(echo "$wid" | tee /dev/stderr | sed 's/ .*//')
#echo "$wid"
echo "Waiting for you to close the Thunar window '${dirname##*/}' ..."
while wmctrl -lp | grep "$wid" > /dev/null
do
 sleep 1
done
rm -r "$dirname"
echo "Done :-)"

相關內容