Estoy escribiendo un script simple en el que necesito abrir un directorio dirname
con Thunar y eliminar ese directorio después de cerrar la ventana de Thunar. Estaba esperando algo como
thunar $dirname && rm -r $dirname
trabajar.
El problema es que el thunar
proceso no parece permanecer conectado a la terminal después de iniciarse: después de ejecutarlo thunar $dirname
, el shell va directamente al siguiente comando, en lugar de esperar thunar
a que se cierre la ventana. ¿Cómo puedo solucionar esto?
Respuesta1
Ya hay un proceso Thunar ejecutándose con la opción "--daemon", por lo que cualquier nueva invocación de Thunar usará esta y su intento de iniciar un nuevo proceso Thunar falla y rm se ejecuta inmediatamente. Tenga en cuenta que el propio "Thunar --daemon" nonoabre una ventana de Thunar.
El proceso del demonio generalmente se inicia al iniciar sesión por definición en /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml ("/etc", no "~"). Eliminar el indicador "--daemon" afectará los scripts existentes que no esperan a que se cierre Thunar, y bloqueará su línea de comando si inicia Thunar desde allí.
Puede "matar" el demonio Thunar antes de la línea de secuencia de comandos relevante con Thunar -q
, ejecutar la línea y reiniciar el demonio Thunar --daemon &
después de ella; tenga en cuenta al &
final para iniciar el demonio en segundo plano; de lo contrario, su secuencia de comandos espera a que finalice. ).Advertencia:Todas las ventanas de Thunar que estaban abiertas "en" el demonio Thunar que "mataste" desaparecerán sin previo aviso.
Entonces tu línea completa podría ser
Thunar -q && thunar $dirname && rm -r $dirname && Thunar --daemon &
Podrías echar un vistazo aPágina de manual de Thunar
Respuesta2
Cuando ya hay un proceso de Thunar ejecutándose (administrador de escritorio u otra ventana), se separará una nueva ventana de Thunar del proceso de llamada y se iniciará el siguiente comando, y no habrá ningún proceso pid
para una ventana en particular. Esto está bien descrito en la respuesta de hh skladby.
Quiero resolver el problema sin apagar el proceso Thunar ya iniciado.
Parece difícil usar pid
[solo], pero hay un wid
(ID de ventana) que se puede encontrar mediante wmctrl -lp
(en combinación con alguna lógica inteligente). Deje que el shellscript lo busque (repetidamente en un bucle) y cuando wid
desaparezca podrá eliminar el directorio.
El siguiente shellscript muestra cómo se puede hacer. Es sólo un script de demostración, porque no hay otra acción que resolver el problema especificado en la pregunta.
#!/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 :-)"