如何使用 bash 脚本打开和使用终端?

如何使用 bash 脚本打开和使用终端?

我需要打开四个终端,每个终端将连接到四个不同的远程电脑并打开这些电脑上的特定目录位置。每个终端将在我的电脑桌面屏幕上的不同位置打开。我使用的是 Ubuntu-12.04。

答案1

一种通常首选的方法是使用tmuxscreen。如果这不是一个选项——您想要多个终端窗口等,您可以采用更复杂的方式来实现。

这看起来很难看,可以更好地解决,但作为一个起点。这是基于 bash 的,用于wmctrl定位终端窗口。

1.定位终端窗口。

我使用快速混搭(丑陋的脚本)来调整终端窗口的大小和位置wmctrl。我将其放在一个名为的函数中c,该函数接受一个或两个可选参数。这可以被破解以满足人们的需求。

c()
{
    local -i tbar_height=23  # To take title bar into account.
    local win r="-ir"
    local -i w h 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 ', ' w h <<< \
        $( 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等位置。参数mhmw分别是最大高度和最大宽度。窗口 ID 可以作为参数二传递,或者"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获取窗口 ID 并对其采取行动。您可能想查看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

曾经有一个脚本,长期丢失和遗忘,它还将窗口 ID 保存到 tmp 文件,在另一个脚本上可以调用该脚本将所有终端移动到其他桌面,将所有终端提升到焦点,随机播放等。

使用wmctrl它应该可以与大多数模拟器(以及其他应用程序,如果需要的话)一起使用。

就像现在一样---^(提供的脚本示例),它相当难看,但您也许可以使用其中的一些作为基础。

相关内容