Код 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

Это просто хорошая привычка заключать параметры с переменными внутри в "", также "иногда путают с", поэтому я предпочитаю $(). И нет смысла использовать "", если у вас нет ничего расширяемого внутри.

Другие вопросы по тегам