파일 관리자(Thunar) 창이 닫힌 후 명령 실행

파일 관리자(Thunar) 창이 닫힌 후 명령 실행

Thunar를 사용 하여 디렉토리를 열고 dirnameThunar 창을 닫은 후 해당 디렉토리를 삭제해야 하는 간단한 스크립트를 작성 중입니다. 나는 다음과 같은 것을 기대하고 있었다

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

이미 실행 중인 Thunar 프로세스가 있는 경우(데스크톱 관리자 또는 다른 창), 새로운 Thunar 창이 호출 프로세스에서 분리되고 다음 명령이 시작되며 pid특정 창에 대한 명령은 없습니다. 이것은 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 :-)"

관련 정보