Как открыть и работать с терминалами с помощью сценария bash?

Мне нужно открыть четыре терминала, каждый из которых будет подключаться к четырем различным удаленным ПК и открывать определенные места на этих ПК. Каждый терминал будет открыт в разных местах на рабочем столе моего компьютера. Как это можно сделать с помощью скриптов bash? Я использую Ubuntu-12.04. Это было бы большой помощью, потому что каждый раз, когда я делаю это, это слишком много для меня.

  • Сортировка нескольких столбцов
  • Использование bash для переформатирования «#include» в списке файлов с использованием regex
  • Сжатие нескольких файлов в разных папках без структуры папок
  • Как завершить скрипт, представленный «at», начать новые процессы?
  • Каковы могут быть причины, по которым сценарии оболочки убивают себя?
  • Как я могу использовать регулярное выражение для извлечения текста, следующего за двумя условиями, в переменную?
  • Пакетное преобразование файлов модулей с помощью XMP
  • Выполнение команды на удаленном хосте не выполняется
  • One Solution collect form web for “Как открыть и работать с терминалами с помощью сценария bash?”

    Один, часто предпочтительный способ – использовать tmux , screen или тому подобное. Если это не вариант – вы хотите использовать несколько окон терминала и т. Д., Вы можете сделать это более сложным способом.

    Это выглядит уродливо и может быть решено лучше, но в качестве отправной точки. Это bash, основанный на использовании wmctrl для размещения окон терминала.

    1. Расположение окон терминала.

    Я использую быстрый mash-up (уродливый скрипт) для изменения размера и позиционирования окон терминала с помощью wmctrl . Я имею это в функции с именем c которая принимает один или необязательно два аргумента. Это можно взломать для удовлетворения потребностей.

     c() { local -i tbar_height=23 # To take title bar into account. local win r="-ir" local -iwh w2 h2 y2 # Argument 2 is Window ID, x or none. if [[ "$2" =~ ^0x[0-9a-f]+$ ]]; then win="$2" elif [[ "$2" == "x" ]]; then win="$(xprop -root \ -f _NET_ACTIVE_WINDOW \ 0x "\t\$0" _NET_ACTIVE_WINDOW | \ cut -f2)" else win=":ACTIVE:" r="-r" fi # Get monitor size (fear this easily can bug – should be done better). read -d ', ' wh <<< \ $( awk 'NR == 1 { print $8, $10; exit }' <(xrandr) ) ((w2 = w / 2)) # Monitor width / 2 ((h2 = h / 2 - tbar_height)) # Monitor height / 2 - title bar ((y2 = h / 2)) # Monitor height / 2 - title bar case "$1" in # g, x, y, w, h "nw") wmctrl $r "$win" -e "0, 0, 0, $w2, $h2";; "ne") wmctrl $r "$win" -e "0, $w2, 0, $w2, $h2";; "se") wmctrl $r "$win" -e "0, $w2, $y2, $w2, $h2";; "sw") wmctrl $r "$win" -e "0, 0, $y2, $w2, $h2";; "n") wmctrl $r "$win" -e "0, 0, 0, $w, $h2";; "e") wmctrl $r "$win" -e "0, $w2, 0, $w2, $h";; "s") wmctrl $r "$win" -e "0, 0, $y2, $w, $h2";; "w") wmctrl $r "$win" -e "0, 0, 0, $w2, $h";; "mh") wmctrl $r "$win" -e "0, -1, -1, -1, $h";; "mw") wmctrl $r "$win" -e "0, -1, -1, $w, -1";; esac } 

    Чтобы расположить окно на северо-запад, скажите c nw , северо-восточный c ne и т. Д. Аргументы mh и mw – максимальная высота и максимальная ширина соответственно. Идентификатор окна можно передать как аргумент два, или "x" для сценария, чтобы прочитать его из xprop – иначе использовать :ACTIVE:

    2. Сценарий для инициализации сессии bash в новых окнах терминала, позиционирования запроса и начала ssh (или что-то еще).

    Здесь можно настроить его, чтобы принять аргумент и т. Д.

     #!/bin/bash # Source positioning script. . "$HOME/scripts/bash/_mypos_wmctrl" # Position window according to argument 1. c "$1" # Act according to argument 2. case "$2" in "host1") ssh -t user@host1 "cd www; bash";; "host2") ssh -t user@host2 "cd mail; bash";; "host3") ssh -t user@host3 "cd dev; bash";; "host4") ssh -t user@host4;; esac # Add this if one want to keep terminal window open after exit from ssh /bin/bash 

    3. Сценарий запуска.

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

     #!/bin/bash terminal=some-terminal-emulator $terminal -e '/path/to/script2 "nw" "host1"' sleep 1 $terminal -e '/path/to/script2 "ne" "host2"' sleep 1 $terminal -e '/path/to/script2 "se" "host3"' sleep 1 $terminal -e '/path/to/script2 "sw" "host4"' sleep 1 

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

    Используя wmctrl он должен использоваться большинством эмуляторов (и других приложений, если хотите).

    Так как теперь ---^ (предоставленные образцы скриптов), это довольно уродливо, но вы можете использовать некоторые из них в качестве базы.

    Interesting Posts

    Я не могу подключить tomcat в моем браузере centos, но он запускается в терминале

    Sed: расширение строки чисел до определенного количества цифр путем заполнения нулями

    Каков механизм моего скрипта, который потерял исполняемый бит после добавления к нему скрипта?

    Установите Chromium OS без USB-диска

    Как перечислить файлы, отсортированные по дате изменения, рекурсивно (нет команды stat!)

    Как файлы отслеживания FreeBSD устанавливаются через порты?

    Как узнать, установлен ли виртуальный пакет в системе Debian?

    mount.cifs дает разрешение на отказ от отказа

    Когда ваш Linux-сервер выключен, ваша программа перестает работать или возобновляется?

    Получить заголовок функции C из BASH

    Удаление текста из активных программ в панели

    текстовая обработка (чтение и вычисление из двух файлов)

    VirtualBox продолжает давать мне ошибки!

    Дата преобразования Bash в файл csv с awk или другим средством linux (csvcut)

    Как открыть новое окно из оболочки с определенным размером и положением?

    Linux и Unix - лучшая ОС в мире.