
Tengo una secuencia de comandos para iniciar la terminal gnome con varias pestañas. Las pestañas se abren en función de una lista de directorios enumerados en el .tabs
archivo que se encuentran en el mismo directorio que el script.
Creo una cadena con varias --tabs --working-directory /some/dir
para cada línea en el archivo de pestañas.
Antes de ejecutar el comando, lo hago eco en la consola. entonces realmente lo ejecuto. El problema es que gnome abre las pestañas pero no abre cada una en su directorio de trabajo. Sin embargo, si copio y pego lo que imprimí en la consola, funciona muy bien. No puedo entender por qué.
aquí está el guión:
#!/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
Respuesta1
Utilice matrices para almacenar argumentos separados. El uso de cadenas confunde al shell cuando luego intenta dividirlas en espacios en blanco.
TERM_LIST_PARAM=( )
Seguido por,
tab_line=( --tab --working-directory="$tab" )
TERM_LIST_PARAM=( "${tab_line[@]}" "${TERM_LIST_PARAM[@]}" ) # or: TERM_LIST_PARAM+=( "${tab_line[@]}" )
Entonces,
gnome-terminal -v "${TERM_LIST_PARAM[@]}"
Además, debe comillas dobles $0
, $1
, $file
y ${profiles_list[@]}
en su código, o tendrá problemas tan pronto como cualquiera de estos valores contenga espacios y/o caracteres globales.
Ver también:
Respuesta2
Aparentemente, las comillas simples alrededor del directorio están perturbando la pieza de gnome-terminal justo dentro del script. eliminarlos resolvió el problema.