Мне нужно открыть несколько вкладок терминала, дать им названия, перейти в каталог и заставить каждую вкладку запускать команду.
Я новичок в 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 "\" bash -c $ {cmds [i]}; bash \ "") из команды, он откроет вкладки в указанном каталоге и назовет их без ошибок.
-Edit-1:
После применения ответа @Tuknutx ниже и редактирования скрипта ошибка больше не появляется, но она дает мне bash: rails c: command not found
и rails s
создает новое приложение rails вместо запуска сервера rails, я использую .rmvrc, чтобы выбрать gemset при доступе к этой папке ,
cmds[1]="'ping 192.168.9.9'"
это дает мне ту же ошибку, но я решил ее, удалив одинарные кавычки. Так что, если я напишу,cmds[1]="ping 192.168.9.9"
это работает.tab=" --tab-with-profile=Default"
??Ответы:
Я бы порекомендовал использовать
tmux
сtmuxinator
, это сделает работу за вас, и вы также можете положиться наterminator
макеты!Для
terminator
проверки макета ответ mhnagaoka здесь также Askubuntu:источник
Чтобы суммировать пару других ответов и их комментарии, вот что я закончил:
Обратите внимание, что я забрал вкладку «мастер», а также профили и заголовки (которые, по-видимому, устарели
gnome-terminal
).источник
$tab -e...
Option “-e” is deprecated and might be removed in a later version of gnome-terminal.
`Use“ - ”завершает опции и помещает командную строку для выполнения после нее.. that's an output but the comands get executed. When i use
$ tab - `команда не выполняется и выводится сообщение терминала:There was an error creating the child process for this terminal. Failed to execute child process “bash -c 'echo Banana ; bash'” (No such file or directory)
Попробуй это:
в противном случае все выражение после -e будет интерпретировано как команда.
Чтобы включить псевдонимы из .bashrc использовать
-ic
вместоc
источник
bash: rails c: command not found
и 'rails s' создает новое приложение rails вместо запуска сервера rails. Это меняетrails c
на терминале без чего-либо еще? Возможно, так и должно бытьrails -c
?rvm list gemsets
и он говоритNo command 'rvm' found
.. запустить ту же командуrvm list gemsets
в первой вкладке, которая открывается без запуска команды, и это сработало! запускает ли команда до загрузки среды и загрузки файла .rvmrc?Аргумент, который вы указываете опцию -e,
"bash -c command; bash"
включает кавычки. Он интерпретирует всю эту строку как имя команды! Попробуйте вместо этого:-e "bash -c 'command ; bash'"
. Таким образом, что запускается в вашем терминальном окнеcommand
, и после этого вы получаете дочернюю оболочку, которую, я полагаю, вы и хотите. Кстати, вы также можете сказать'command & bash'
; это запустит команду на заднем плане и сразу же даст вам дочернюю оболочку.источник
options+=($tab --title="${titles[i]}" -e "\"bash -c ${cmds[i]} ;bash\"" )
наoptions+=($tab --title="${titles[i]}" -e "\"bash -c '${cmds[i]} ;bash'\"" )
и это дало мне ту же ошибку .. я делаю это правильно?