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

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

  • Замените строку в файле на другую, где оба сохраняются в переменных
  • Предотвращение расширения определенного пространства в переменной
  • Выполнить ./script.sh vs bash script.sh - отклонено разрешение
  • Одновременно проверьте наличие пустого выхода и успешный статус выхода
  • В сценарии Bash в (set -x) не отображается команда «cat». (его содержание)
  • Запустите команду в sudo через SSH
  • sh AND и OR в одной команде
  • скрипт командной строки gnome-open
  • удалить строки, где значение поля меньше или равно 3 - sed или awk?
  • Как stdin обрабатывается в этом сценарии bash?
  • Заменить значения в файле
  • Как написать вывод на экран из службы systemd во время загрузки?
  • 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 он должен использоваться большинством эмуляторов (и других приложений, если хотите).

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

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