私はdirname
Thunarを使ってディレクトリを開き、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
あります。シェルスクリプトにそれを確認させ(ループで繰り返し)、それが消えたらディレクトリを削除できます。wid
wmctrl -lp
wid
次のシェルスクリプトは、これを行う方法を示しています。質問で指定された問題を解決する以外は何もしないデモスクリプトです。
#!/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 :-)"