Код xdotool работает только в том случае, если программа была прервана командой killall
Если лифпад открыт.. и я закрываю его через терминал
killall leafpad
тогда этот код xdotool будет работать нормально.
он открывает файл, ждет 2 секунды, ищет заголовок, а затем активирует и перемещает его.
leafpad '/media/1/AAA'
sleep 2
a=`xdotool search --name "AAA"`
xdotool windowactivate --sync $a
xdotool windowmove --sync $a 377 153
но давайте закроем leafpad вручную без команды killall leafpad.
Теперь давайте снова запустим этот скрипт.
Нет, на этот раз это не работает.
В чем заключается решение, так что этот код может работать ВСЕГДА, даже если листовка не была закрыта через killall
команда.
Чем это вызвано?
1 ответ
Я не могу воспроизвести вашу ситуацию, но кажется, что есть другая проблема.
leafpad '/media/1/AAA'
Это запустит leafpad, а затем ПОДОЖДИТЕ, пока он не закроется. Вы должны закончить эту строку символом &, чтобы она продолжала:
leafpad '/media/1/AAA' &
Кроме того, я бы рефакторинг вашего кода следующим образом:
leafpad '/media/1/AAA' &
sleep 2
a=$(xdotool search --name 'AAA')
xdotool windowactivate --sync "$a"
xdotool windowmove --sync "$a" 377 153
Это просто хорошая привычка заключать параметры с переменными внутри в "", также "иногда путают с", поэтому я предпочитаю $(). И нет смысла использовать "", если у вас нет ничего расширяемого внутри.