Gnome-Terminal öffnet Tabs aus meinem Skript nicht richtig

Gnome-Terminal öffnet Tabs aus meinem Skript nicht richtig

ich habe ein Skript zum Starten des Gnome-Terminals mit mehreren Tabs. Die Tabs werden basierend auf einer Liste von Verzeichnissen geöffnet, .tabsdie in der Datei aufgelistet sind und sich im selben Verzeichnis wie das Skript befinden.

Ich erstelle einen String mit mehreren, --tabs --working-directory /some/direinen für jede Zeile in der Tabs-Datei.

bevor ich den Befehl ausführe, gebe ich ihn an die Konsole aus. dann führe ich ihn tatsächlich aus. Das Problem ist, dass Gnome die Tabs zwar öffnet, aber nicht jeden einzelnen in seinem Arbeitsverzeichnis. Wenn ich jedoch das, was ich ausgedruckt habe, kopiere und in die Konsole einfüge, funktioniert es einwandfrei. Ich kann nicht herausfinden, warum.

hier ist das Skript:

#!/bin/bash 

SCRIPT_DIR=$(dirname $(readlink -f $0))
declare -a profiles_list=()
while [[ "$1" != "" ]]
do
        profiles_list+=($1)
        shift
done

if [[ ${#profiles_list[@]} -eq 0 ]]
then
        profiles_list+=("TERM_DEFAULT")
fi

TERM_LIST_PARAM=""

for profile in ${profiles_list[@]}
do
        file="${SCRIPT_DIR}/${profile}.tabs"
        if [[ ! -f $file ]]
        then
                echo $file does not exists
        fi
        while read tab
        do
                tab_line="--tab --working-directory='${tab}'"
                TERM_LIST_PARAM="$tab_line $TERM_LIST_PARAM"
        done < $file
done
echo gnome-terminal ${TERM_LIST_PARAM}
gnome-terminal -v ${TERM_LIST_PARAM}
echo $?
exit 0

Antwort1

Verwenden Sie Arrays zum Speichern einzelner Argumente. Die Verwendung von Zeichenfolgen verwirrt die Shell, wenn sie später versucht, sie anhand von Leerzeichen aufzuteilen.

TERM_LIST_PARAM=( )

Gefolgt von,

tab_line=( --tab --working-directory="$tab" )
TERM_LIST_PARAM=( "${tab_line[@]}" "${TERM_LIST_PARAM[@]}" )  # or: TERM_LIST_PARAM+=( "${tab_line[@]}" )

Dann,

gnome-terminal -v "${TERM_LIST_PARAM[@]}"

$0Darüber hinaus müssen Sie in Ihrem Code , $1, $file, und in doppelte Anführungszeichen setzen ${profiles_list[@]}, sonst treten Probleme auf, sobald einer dieser Werte Leerzeichen und/oder Globbing-Zeichen enthält.

Siehe auch:

Antwort2

Offenbar stören einfache Anführungszeichen um das Verzeichnis den Teil des Gnome-Terminals direkt innerhalb des Skripts. Das Entfernen dieser Anführungszeichen hat das Problem gelöst.

verwandte Informationen