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 部分。删除它们解决了问题。

相关内容