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