Я должен открыть несколько терминальных вкладок, дать им заголовки, перейдите к каталогу и заставьте каждую вкладку выполнить команду.
Я плохо знаком с Linux и сценариями оболочки после поиска онлайн и проверки некоторых решений, я сделал этот сценарий (ОТРЕДАКТИРОВАННЫМ на основе ответов ниже):
#!/bin/bash
cd /media/Extra/Project
tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)
cmds[1]="'rails s'"
titles[1]="Server"
cmds[2]="'rails c'"
titles[2]="Console"
for i in 1 2; do
options+=($tab --title="${titles[i]}" -e "bash -c \"${cmds[i]} ; bash\"" )
done
gnome-terminal "${options[@]}"
exit 0
Это открывает вкладки, имена их, но сбой для выполнения команд, генерирующих эту ошибку:
Была ошибка при создании дочернего процесса для этого терминала
Другой недостаток - то, что, если я остановил рабочую команду, она закрывает вкладку, которую я не хочу. Я должен смочь остановить команду и выполнить ее снова в той же вкладке.
Что не так со сценарием? Там другой более простой путь состоит в том, чтобы сделать это?
Примечание: Если я удалил (-e "\, "колотят-c $ {cmds [я]}; колотите \""), часть от команды, она открывает вкладки в данном каталоге, и назовите их без ошибок.
После применения @Tuknutx ответ ниже и редактирование сценария, ошибка больше не появляется, но это дает мне bash: rails c: command not found
и rails s
создает новое приложение для направляющих вместо того, чтобы запустить сервер направляющих, я использую .rmvrc для выбора gemset, после того как к этой папке получают доступ.
Попробуйте это:
options+=($tab --title="${titles[i]}" -e "bash -c \"${cmds[i]} ; bash\"" )
иначе целое выражение после-e будет интерпретироваться как команда.
Для включения псевдонимов от использования .bashrc -ic
вместо c
Аргумент, который Вы даете-e опции, "bash -c command; bash"
включая кавычки. Это интерпретирует ту целую строку как название команды! Попробуйте это вместо этого: -e "bash -c 'command ; bash'"
. Таким образом, на чем работают Ваше окно терминала, command
, и после того, как это работает, Вам дают дочернюю оболочку, которую я принимаю, то, что Вы хотите. Кстати, можно также сказать 'command & bash'
; это выполнит команду на фоне и даст Вам дочернюю оболочку сразу же.
Я рекомендовал бы использовать tmux
с tmuxinator
, это будет делать задание для Вас, и можно полагаться terminator
разметки также!
Для terminator
ответ mhnagaoka's контроля расположения здесь askubuntu также:
После установки Вашего расположения щелкните правой кнопкой по любому терминальному фону и выберите Preferences → вкладка Layouts и нажмите на кнопку Add.
Дайте ему имя и совершите нападки Близко.
Это должно создать упомянутый
~/.config/terminator/config
файл.Теперь можно запустить разделитель с помощью сохраненного использования расположения:
terminator -l yourLayout
(замените yourLayout тем, что Вы выбрали на шаге 2).(Дополнительно) Редактирование
~/.config/terminator/config
файл так, чтобы, где это говорит[layouts]
и вложенный ниже его[[yourLayout]]
, переименуйте yourLayout, чтобы принять значение по умолчанию и удалить/переименовать предыдущую раскладку по умолчанию. Теперь, когда Терминатор запускается без любых параметров, он загрузит Ваше пользовательское[[default]]
расположение!
Для суммирования нескольких других ответов и их комментариев вот то, с чем я закончил:
#!/bin/bash
cd /path/of/my/stuff
tab=" --tab"
options=()
cmds[1]="echo Banana"
cmds[2]="echo Cat"
for i in 1 2; do
options+=($tab -e "bash -c '${cmds[i]} ; bash'" )
done
gnome-terminal "${options[@]}"
exit 0
Обратите внимание, что я устранил 'основную' вкладку, и профили и заголовки (которые, кажется, удерживаются от использования в gnome-terminal
).