gnome-terminal이 내 스크립트에서 탭을 제대로 열지 않습니다.

gnome-terminal이 내 스크립트에서 탭을 제대로 열지 않습니다.

여러 탭이 있는 그놈 터미널을 시작하는 스크립트가 있습니다. 탭은 .tabs스크립트와 동일한 디렉토리에 있는 파일 에 나열된 디렉토리 목록을 기반으로 열립니다 .

--tabs --working-directory /some/dir탭 파일의 각 줄에 대해 여러 개의 문자열을 만듭니다 .

명령을 실행하기 전에 콘솔에 표시합니다. 그러면 실제로 실행해 볼게요. 문제는 그놈이 탭을 열지만 작업 디렉토리의 각 탭은 열리지 않는다는 것입니다. 그러나 내가 인쇄한 내용을 콘솔에 복사하여 붙여넣으면 훌륭하게 작동합니다. 이유를 알 수 없습니다.

스크립트는 다음과 같습니다.

#!/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 부분을 방해하고 있습니다. 이를 제거하면 문제가 해결되었습니다.

관련 정보