
У меня есть скрипт для запуска терминала 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
Используйте массивы для хранения отдельных аргументов. Использование строк сбивает оболочку с толку, когда она позже пытается разделить их по пробелам.
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 внутри скрипта. их удаление решило проблему.