Проблема заключалась в том, что вы не можете отделить приложение от процесса, который его запустил. Решение, которое работает для меня, заключается в том, чтобы какой-то другой процесс, уже запущенный, сделал это для меня. Вот мое решение:
pkill -n xterm
cd /mnt/0/botany
xterm -g 80x59+885+0 -title 'Botany' -e vim -S bot.vim -o g y d "+res 8|2winc w|res 30" &
xp=
dp=
while ps ax|grep Botany|grep -v grep; do
if [ -f q ]; then
s=$(cat q)
rm q
if [[ "$s" =~ 'images.*' ]]; then
kill $dp 2> /dev/null
vd="$s $vd"
xv -geometry +0+380 ${vd% *} &
dp=$(pgrep xv|tail -1)
else
kill $xp 2> /dev/null
vx="$s $vx"
xv -geometry +0+0 ${vx% *} &
xp=$(pgrep xv|tail -1)
fi
sleep 1
wmctrl -a Botany
fi
done
kill $dp $xp 2> /dev/null
Первые три команды, относящиеся к xterm, содержат оригинальный сценарий, который я использовал для открытия этого проекта, поэтому этот сценарий продолжал открываться и ждал, пока я закрою vim и позволю xterm умереть, после чего этот вызывающий сценарий тоже закроется , Итак, здесь был удобный процесс, который ничего не делал, и в том самом каталоге, в котором я работал.
Я добавил оставшуюся часть кода, который проверяет наличие файла q, читает его, немедленно уничтожает и уничтожает любой запущенный экземпляр средства просмотра. затем перезапускает программу просмотра, используя путь к файлу из файла q в качестве изображения для показа.
Все полностью отделено от vim, где мой vimscript просто записывает путь к файлу в файл q и никогда не ссылается на приложение просмотра xp.