我正在编写一个简单的脚本,在其中我需要使用Thunar打开一个目录dirname,并在关闭Thunar窗口后删除该目录。我还以为会有
thunar $dirname && rm -r $dirname去工作。
问题是,thunar进程在启动后似乎没有与终端保持连接:在运行thunar $dirname之后,shell直接转到下一个命令,而不是等待关闭thunar窗口。我怎么才能解决这个问题?
发布于 2021-10-29 20:27:47
有一个Thunar进程已经使用“-daemon”选项运行,因此任何新的Thunar调用都将使用此调用,并且尝试启动新的Thunar进程失败,rm立即运行。注意,"Thunar -守护进程“本身不会打开Thunar窗口。
守护进程通常在/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml中定义为登录时启动("/etc",而不是"~")。删除“-守护进程”标志将影响现有脚本,这些脚本不会等待Thunar关闭,如果您从那里启动Thunar,它将阻塞您的命令行。
您可以在使用Thunar -q的相关脚本行之前“杀死”Thunar守护进程,运行该行,然后使用Thunar --daemon &重新启动守护进程--注意后台启动守护进程的&,否则脚本等待它结束)。警告:在“杀死”的Thunar守护进程上打开的所有Thunar窗口都将在没有通知的情况下消失。
所以你的全队可能
Thunar -q && thunar $dirname && rm -r $dirname && Thunar --daemon &你可以看看图纳尔氏病
发布于 2021-10-29 22:25:14
当Thunar进程已经在运行(桌面管理器或其他窗口)时,将从调用进程中分离出一个新的Thunar窗口,并将启动下一个命令,并且特定窗口没有pid。这一点在hh skladby的回答中有很好的描述。
我想在不关闭已经开始的Thunar进程的情况下解决问题。
使用pid似乎很困难,但是有一个wid (窗口ID),它可以通过wmctrl -lp (结合一些智能逻辑)找到。让check脚本检查它(在循环中重复),当wid消失时,您可以删除目录。
下面的shows脚本演示了如何完成该操作。它只是一个演示脚本,因为除了解决问题中指定的问题之外,没有其他的操作。
#!/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 :-)"https://unix.stackexchange.com/questions/675132
复制相似问题