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

使用陣列來儲存單獨的參數。當 shell 稍後嘗試用空格分割字串時,使用字串會使 shell 感到困惑。

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 部分。刪除它們解決了問題。

相關內容