ファイルマネージャウィンドウが閉じた後にコマンドを実行する

ファイルマネージャウィンドウが閉じた後にコマンドを実行する

私はdirnameThunarを使ってディレクトリを開き、Thunarウィンドウを閉じてからディレクトリを削除する必要がある簡単なスクリプトを書いています。次のようなことを期待していた

thunar $dirname && rm -r $dirname

働く

問題は、thunarプロセスの開始後に端末への接続を維持しないようです。実行後、シェルはウィンドウが閉じるのを待つのではなく、thunar $dirname次のコマンドに直接移動します。thunarこの問題をどのように解決できますか?

答え1

"--daemon"オプションを使用してすでに実行されているThunarプロセスがあるため、すべての新しいThunar呼び出しはそのプロセスを使用し、新しいThunarプロセスを開始しようとすると失敗し、rmがすぐに実行されます。 「Thunar --daemon」自体がいいえトゥナルの窓を開きます。

デーモンは通常、/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

pidすでに実行されているThunarプロセス(デスクトップマネージャまたは他のウィンドウ)がある場合は、新しいThunarウィンドウが呼び出しプロセスから切り離されて次のコマンドを開始し、ウィンドウコマンドはありません。 hh skladbyの答えはこれを非常によく説明しています。

すでに起動しているThunarプロセスを終了せずに問題を解決したいと思います。

[それ自体は]難しいようですが(一部のスマートロジックと組み合わせて)見つけることができる(ウィンドウID)がpidあります。シェルスクリプトにそれを確認させ(ループで繰り返し)、それが消えたらディレクトリを削除できます。widwmctrl -lpwid

次のシェルスクリプトは、これを行う方法を示しています。質問で指定された問題を解決する以外は何もしないデモスクリプトです。

#!/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 :-)"

関連情報