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

Я пытаюсь написать сценарий bash для автоматизации выполнения некоторых команд. Однако некоторые из этих команд должны выполняться на отдельной вкладке терминала. Поэтому я использую в своем сценарии bash следующее, чтобы открыть новую вкладку:

xdotool key ctrl+shift+t

это работает, но следующие команды в моем сценарии bash по-прежнему выполняются на предыдущей вкладке терминала. Как я могу сделать новую открытую вкладку терминала активной и запустить следующие команды на этой вкладке?


person MehdiB    schedule 20.12.2016    source источник


Ответы (3)


Какой эмулятор терминала вы используете? Сильно от этого зависит.

В общем, вы можете написать команды, которые хотите выполнить, в сценарии оболочки и указать своему эмулятору терминала выполнить сценарий после его запуска.

Пример с xterm:

echo '#!/bin/bash' > /tmp/thescript 
echo 'ls -la' >> /tmp/thescript
chmod +x /tmp/thescript
xterm -hold -e /tmp/thescript

РЕДАКТИРОВАТЬ: я только что увидел, что вы спросили, как добиться этого с помощью xdotool. Так что этот ответ может быть недействительным. Пожалуйста, скажите мне, если это так, я удалю его.

person Thomas Maier    schedule 20.12.2016

Если все, что вы хотите, это запускать команды в фоновом режиме / параллельно, без синхронного ожидания завершения каждой команды до начала следующей, завершите их амперсандом &, чтобы указать оболочке сделать это.

Кроме того, вы можете выполнять команды в их собственных подоболочках, заключив каждую в круглые скобки ( ). Если это долго работающие процессы или вы не хотите загрязнять исходную оболочку своим выводом, вы можете разветвить их и записать их вывод в файл с чем-то вроде (setsid command 1>/path/to/log &).

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

Вместо того, чтобы разбираться в этом беспорядке самостоятельно, вы можете использовать скрипт из этого ответа Джейкоба Влийма, который оборачивает оконный подход, который использует xdotool и wmctrl для «отправки» команд в разные окна терминала. Скрипт написан на python 3, но его можно легко переписать для выбранной среды оболочки.

Более прямой подход предполагает использование TIOCSTI ioctl для ввода символов в другой терминал. Согласно странице руководства tty_ioctl:

NAME
       ioctl_tty - ioctls for terminals and serial lines

...

DESCRIPTION

       The  ioctl(2) call for terminals and serial ports accepts many possible
       command arguments.  

   ...

   Faking input

       TIOCSTI   const char *argp
              Insert the given byte in the input queue

   ...

Вот c и perl и пример в python, как указано в этом ответе.

person pkfm    schedule 25.11.2019

Как вы используете xdotool? Это можно сделать с помощью цепочки, например:

$ xdotool key "ctrl+shift+t"; xdotool type "ls"; xdotool key Return
person Fernando    schedule 19.05.2020