[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Über Skript mehrere Tabs in Konsole öffnen



Hi

2012/8/7 Andre Tann <atann@alphasrv.net>:

> mit diesem [¹] Schnippsel versuche ich, eine konsole (also das
> KDE-Konsolen-Programm) und darin dann mehrere Tabs zu öffnen.
> Anschließend sollen ssh-Verbindungen auf allerlei Server hergestellt
> werden.

Für genau diesen Zweck habe ich mir das Script "Tabs" geschrieben:

-> http://paste.debian.net/183227/

#! /bin/bash

# Rufe Konsole (KDE) bzw. Gnome Terminal so auf, das eine Anzahl von
# Tabs mit passendem Kommando gestartet wird.
# Die zu verwendenden Tabs stehen in der Datei
"$HOME/var/term-tabs/$1.term-tabs"
# Es ist nur der "name" der Datei als Arg. 1 anzugeben (z.B. nzz-prod)
tabs_file="$HOME/var/term-tabs/$1"
test -r "$tabs_file" || tabs_file="$HOME/var/term-tabs/$1.term-tabs"
shift

# Evtl. vorhandene weitere Tabs werden an den Aufruf angehängt.
# Z.B. "-l root" um "ssh ... -l root" auszuführen.
args="$@"

terminal_type="konsole"
terminal_type="/usr/bin/gnome-terminal"

function KonsoleTabs() {
    echo "Starte KDE konsole mit $(wc -l < "$tabs_file") Tabs aus $tabs_file"

    # Erzeuge eine temporäre Datei
    tmpfile=$(mktemp /tmp/Konsole-Tabs.XXXXXX)

    # Formatiere die $tabs_file Datei für Konsole um
    sed 's,\(.*\)|\(.*\),title:\1;; command:\2'" $*"',' "$tabs_file" >
"$tmpfile"

    # Rufe Konsole auf
    konsole --tabs-from-file "$tmpfile" ; ex="$?"
    # Lösche Konfigurationsdatei
    rm "$tmpfile"
    # Beende mit dem Exit Code, den gnome-terminal zurück gegeben hat.
    exit "$ex"
}

# Starte gnome-terminal mit einer Anzahl von Tabs und passendem Kommando
function GnomeTerminalTabs() {
    echo "Starte Gnome Terminal mit $(wc -l < "$tabs_file") Tabs aus $tabs_file"

    # http://goo.gl/M6o7p bzw.
http://newsoffice.de/groups/index.php?action=article&id=PDMyMTY0NjMuME8xcU1wemZwbUBQb2ludGVkRWFycy5kZT4=&group=de.comp.os.unix.shell&uberblicka=&first=1&last=50
    # Speichere den alten IFS und Setze IFS auf <tab> + <newline>; dh.
entferne <space>
    IFS_bak=$IFS ; IFS=$'\t\n'

    # Rufe das Gnome Terminal "passend" auf
    gnome-terminal $(sed 's,^\(.*\)|\(.*\)$,--tab\t-t\t\1\t-e\t\2,'
"$tabs_file")
    # Speichere den Rückgabewert von gnome-terminal
    ex=$?

    # Setze IFS zurück
    IFS=$IFS_bak

    # Beende mit dem Exit Code, den gnome-terminal zurück gegeben hat.
    exit "$ex"
}

if [[ ! -r "$tabs_file" ]]; then
    echo "Fehler! Tabs Datei $tabs_file nicht vorhanden!"
    exit 1
fi

case "$terminal_type" in
    *konsole)
        KonsoleTabs "$@"
        ;;
    *gnome-terminal)
        GnomeTerminalTabs "$args"
        ;;
    *)
        echo "Fehler! Terminal $terminal_type wird nicht unterstützt..."
        exit 1
        ;;
esac

exit 0
# EOF #

Wie man unschwer erkennt, unterstützt das Script sowohl KDE Konsole
als auch Gnome Terminal.

Aufruf

Das Script erwartet 1 Parameter: Name der Datei mit den zu startenden
Tabs. Z.B.:

$ Tabs nzz-prod

In ~/var/term-tabs/nzz-prod.term-tabs steht:

cas1-nzz-prod|ssh cas1-nzz-prod
cas2-nzz-prod|ssh cas2-nzz-prod
web1-nzz-prod|ssh web1-nzz-prod
web2-nzz-prod|ssh web2-nzz-prod



Bei Konsole wird vom Script folgender Aufruf gebaut:


    konsole --tabs-from-file "$tmpfile"

"$tmpfile" wird mit dem gefüllt:

    sed 's,\(.*\)|\(.*\),title:\1;; command:\2'" $*"',' "$tabs_file" >
"$tmpfile"

Bei gnome-terminal kann man auf diese blöde
temporäre Datei verzichten; dort ist der erzeugte
Aurfur "simpel" dies:

    gnome-terminal $(sed 's,^\(.*\)|\(.*\)$,--tab\t-t\t\1\t-e\t\2,'
"$tabs_file")


Gruss,
Alexander
--
↯    Lifestream (Twitter, Blog, …) ↣ http://alexs77.soup.io/     ↯
↯ Chat (Jabber/Google Talk) ↣ a.skwar@gmail.com , AIM: alexws77  ↯


Reply to: