Выполните несколько команд xdotool в одной строке, разделенной друг от друга

Я пытаюсь работать xdotool type word затем xdotool key Return от запуска предпочтения Aplications.
Но если я использую && или ;, xdotool оценивает его как продолжение входа.

10
задан 24 August 2014 в 07:50

2 ответа

Длинная короткая история:
Используйте сценарий.

#! /bin/sh
# With some window selection magic, or a sleep 
# if you want to do that manually.
xdotool type word
xdotool key Return

И вставленный в путь сценария Exec поле.


Длинная история:

Согласно xdotool страница справочника:

type
       Supports newlines and tabs (ASCII newline and tab). 
       With respect to "COMMAND CHAINING", this command consumes the
       remainder of the arguments and types them. That is, no commands can
       chain after 'type'.

Объединение в цепочку команды через ; или & не возможно, так как это - синтаксис оболочки, и Приложения Запуска не поддерживает синтаксис оболочки. Однако, если все, что Вы хотите сделать, нажимают Enter после ввода чего-то, существует окольный способ сделать так.

Когда это говорит новую строку "ASCII", это не означает пустое \n. И замена команды (xdotool type "$(printf '\n')", скажите), ест запаздывание новых строк. После этого xdotools сообщение форума, я попробовал это:

xdotool type "$(printf 'date\n ')"

И это работало. Но это только работает, если существует некоторый символ после \n, и это, очевидно, оставляет конечный пробел, который не был бы тем, что Вы хотите. Я изменил это к:

xdotool type "$(printf 'date\n\e ')"

И это работает и не оставляет конечного пробела. Однако это могло бы вызвать проблемы для тех, которые используют режим Vi в их оболочке.

Благодаря комментариям @steeldriver я выяснил, что это происходило из-за меня испытывающий его на очень терминальном, на котором я выполнял команды. Просто небольшой разрыв между моим Enter нажатия и xdotool команда состояла достаточно в том, чтобы единственная новая строка была зарегистрирована правильно. Таким образом:

sleep 0.1; xdotool type $'date\n'

Так любое расширение строки путем заключения в кавычки его:

xdotool type 'date
'

или использование интерпретации оболочки как @steeldriver предложенный похоже на правильную опцию.

Однако сценарий, содержащий:

#! /bin/sh
sleep 1
xdotool type date
xdotool key Return

в Exec поле хорошо работало. Действительно, я всегда рекомендую использовать сценарий для сложных команд в файле на рабочем столе.

У Вас может быть сценарий с /usr/bin/xdotool в хижине, но странице справочника говорит"script режим не полностью изложен в деталях и может упасть ниже Ваших ожиданий", таким образом, я придерживался для избиения сценариев.

Я, возможно, видел вещи, но в моих первых двух попытках, я должен был поместить (маленький) sleep между type и key команды. Это было артефактом испытания его на терминале, который выполнял команды вместо другого окна.

15
ответ дан 16 November 2019 в 15:33

Кажется мне, приложение не анализирует несколько команд, примкните к обработке его как единственная команда. Как таковой делают его единственной командой путем обертывания его вызов оболочки...

bash -c 'xdotool type date; xdotool key Return'

Теперь можно также сделать другие вещи оболочки...

bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'

Примечание, что команда "даты", используемая в том в последний раз, включает новую строку! и "xdotool" произведет его.

ПРИМЕЧАНИЕ: если бы Вы делаете это как макрос клавиатуры, я также добавил бы еще несколько опций к "xdotool" для создания этой работы лучше...

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
1
ответ дан 16 November 2019 в 15:33

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

Похожие вопросы: