bash 스크립트를 사용하여 터미널을 열고 사용하는 방법은 무엇입니까?

bash 스크립트를 사용하여 터미널을 열고 사용하는 방법은 무엇입니까?

4개의 터미널을 열어야 합니다. 각 터미널은 4개의 서로 다른 원격 컴퓨터에 연결되고 해당 컴퓨터의 특정 디렉터리 위치를 엽니다. 각 터미널은 내 컴퓨터 데스크탑 화면의 다른 위치에서 열립니다. 우분투-12.04를 사용하고 있습니다.

답변1

일반적으로 선호되는 방법 중 하나 는 tmux등을 사용하는 것입니다 . screen이것이 옵션이 아닌 경우 - 여러 개의 터미널 창 등을 원하면 보다 정교한 방법으로 이를 수행할 수 있습니다.

이는 보기 흉해 보이고 더 잘 해결될 수 있지만 출발점 역할을 합니다. 이는 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는 인수 2로 전달되거나 "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대부분의 에뮬레이터(및 필요한 경우 다른 앱)에서 작동 합니다.

현재로서는 ---^(제공된 스크립트 예제) 꽤 보기 흉하지만 아마도 이 중 일부를 기반으로 사용할 수 있을 것입니다.

관련 정보