
eu tenho um script para iniciar o terminal gnome com várias guias. As abas são abertas com base em uma lista de diretórios listados no .tabs
arquivo que estão no mesmo diretório do script.
Eu crio uma string com vários --tabs --working-directory /some/dir
para cada linha do arquivo de guias.
antes de executar o comando, eu o repito no console. então eu realmente executo. O problema é que o gnome abre as guias, mas não abre cada uma delas em seu diretório de trabalho. No entanto, se eu copiar e colar o que imprimi no console, ele funcionará muito bem. não consigo entender o porquê.
aqui está o roteiro:
#!/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
Responder1
Use arrays para armazenar argumentos separados. O uso de strings deixa o shell confuso quando mais tarde tenta dividi-las em espaços em branco.
TERM_LIST_PARAM=( )
Seguido pela,
tab_line=( --tab --working-directory="$tab" )
TERM_LIST_PARAM=( "${tab_line[@]}" "${TERM_LIST_PARAM[@]}" ) # or: TERM_LIST_PARAM+=( "${tab_line[@]}" )
Então,
gnome-terminal -v "${TERM_LIST_PARAM[@]}"
Além disso, você deve colocar aspas duplas $0
, $1
, $file
e ${profiles_list[@]}
em seu código, ou você terá problemas assim que qualquer um desses valores contiver espaços e/ou caracteres globulares.
Veja também:
Responder2
aparentemente aspas simples no diretório estão perturbando a parte do gnome-terminal dentro do script. removê-los resolveu o problema.