gnome-terminal がスクリプトからタブを正しく開かない

gnome-terminal がスクリプトからタブを正しく開かない

複数のタブで gnome ターミナルを起動するスクリプトがあります。タブは、.tabsスクリプトと同じディレクトリにあるファイルにリストされているディレクトリのリストに基づいて開かれます。

--tabs --working-directory /some/dirタブ ファイルの各行に複数の文字列を作成します。

コマンドを実行する前に、コンソールにエコーします。その後、実際に実行します。問題は、gnome はタブを開きますが、作業ディレクトリ内の各タブを開かないことです。ただし、コンソールに出力したものをコピーして貼り付けると、うまく機能します。理由がわかりません。

スクリプトは次のとおりです:

#!/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

答え1

個別の引数を格納するには配列を使用します。文字列を使用すると、後で空白で分割しようとしたときにシェルが混乱します。

TERM_LIST_PARAM=( )

に続く、

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

それから、

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

$0さらに、コード内で、$1$file、を二重引用符で囲む必要があります。そうしない${profiles_list[@]}と、これらの値のいずれかにスペースやグロブ文字が含まれているとすぐに問題が発生します。

参照:

答え2

どうやら、ディレクトリを囲む単一引用符が、スクリプト内の gnome-terminal の部分を妨害しているようです。それらを削除すると、問題は解決しました。

関連情報