저는 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 :-)"