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端末部分を妨げます。これを削除すると問題が解決しました。

関連情報