Программно откройте вкладку в gnome-terminal, выполните команду и оставьте вкладку открытой

12

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

что-то вроде этого:

gnome-terminal --tab -e "ls -a" --tab -e "ls"

но проблема в том, что вкладки закрываются, как только заканчиваются команды "ls". Кто-нибудь знает, как заставить вкладки оставаться открытыми?

отметка
источник

Ответы:

11

Gnome-терминал может либо выполнить команду, либо открыть оболочку, но не оба одновременно.

Существует обходной путь, заключающийся в инкапсуляции команды и последующем вызове оболочки в одну команду.

$ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""

Для большего количества альтернатив прочитайте мой ответ на подобный вопрос о переполнении стека: /programming/3512055/avoid-gnome-terminal-close-after-script-execution/3531426#3531426

lesmana
источник
10

Если у вас есть xdotoolи wmctrlустановлены, то следующий сценарий оболочки может работать:

#!/usr/bin/env bash

window="$(xdotool search --class gnome-terminal | head -1)"
xdotool windowfocus $window
xdotool key ctrl+shift+t
xdotool type "$*"
xdotool key Return

Я использую это так:

$ run-in-new-tab 'ls -l'

Я нашел эту идею в блоге Trustin Lee .


источник
Благодарю. Это работает довольно хорошо. Я должен добавить sleep 1после Ctrl + Shift + T, чтобы заставить его работать на меня, хотя. Я приму это, если больше ничего не выйдет в ближайшее время
Да - я обнаружил, что должен sleep 2был заставить это работать 100% времени. Отличное решение - я сейчас открываю 8 вкладок, которые ssh на разных серверах, запускают различные процессы и т. Д., Используя это: моя утренняя установка теперь полностью скриптована :)
Макс Уильямс
На самом деле wmctrlне требуется.
Недим