
여러 탭이 있는 그놈 터미널을 시작하는 스크립트가 있습니다. 탭은 .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 부분을 방해하고 있습니다. 이를 제거하면 문제가 해결되었습니다.