Я пытаюсь создать команду, которая откроет 3 сервиса из стека Rails, rails s, spork и autotest. Я могу запустить эти команды индивидуально, открыв 3 терминала, зайдя в папку приложения и запустив их. Я даже могу открыть 3 новые вкладки и запустить команды на каждой.
Проблема в том, что они терпят неудачу, когда я пытаюсь открыть вкладки через gnome-терминал, например:
gnome-terminal --tab --title="rails s" -e "rails s" --tab --title="spork" -e "spork" --tab --title="autotest" -e "autotest"
Ошибка (для spork и автотеста):
There was an error creating the child process for this terminal
Failed to execute child process "spork" (No such file or directory)
Удивительно он работает для 'rails s' (на вкладке показан работающий сервер).
Есть идеи?
Ниже ответ от , stackoverflow.com
Добавляет eval "$BASH_POST_RC"
в конец Вашего Набора .bashrc
BASH_POST_RC
переменная среды для каждой вкладки к той команде, которую Вам нравится выполнять, например: gnome-terminal --working-directory="/home/zardoz/projects/my_rails_app" --tab -e 'bash -c "export BASH_POST_RC=\"rails server\"; exec bash"' --tab -e 'bash -c "export BASH_POST_RC=\"autotest\"; exec bash"'
Вызов gnome-terminal
три раза и строковое представление команд вместе с &&
не будет работать, и вкладки не появятся в том же терминале, и действительно необходимо будет выйти из первого терминала для рядом с, появляются.
Способ удостовериться все Ваши вкладки открывается в одном экземпляре gnome-terminal
все одновременно должны использовать --tab-with-profile=PROFILENAME
переключатель. В команде ниже Вас может оставить первую команду как gnome-terminal --tab
как, то, что это - первое окно, которое будет сгенерировано; теперь все, что необходимо знать, - какой профиль Вы используете, и можно использовать --tab-with-profile=YourProfile
для вызова других команд и они все появятся сразу в исходном открытом терминале.
Вот Ваша измененная команда:
gnome-terminal --tab --title="rails s" -e "rails s" --tab-with-profile=Default --title="spork" -e "spork" --tab-with-profile=Default --title="autotest" -e "autotest"
(Для будущих читателей: замените названиями программы, данными после -e
проверять командную строку, данную здесь; помните свои цели за -e
должен быть установлен и в $PATH
; для вещей не в $PATH
используйте полный путь такой как, например, /opt/mike/program
)
Не забудьте указывать фактический профиль, который Вы используете для --tab-with-profile
переключатели. Первый вызов gnome-terminal
должен использовать --tab
и все остальные --tab-with-profile
. С этим методом должно быть возможно открыть большое количество вкладок все в том же экземпляре gnome-terminal
.
Найдите профиль, который Вы в настоящее время используете путем щелчка правой кнопкой в gnome-terminal
и взгляд на профили и будет маркером на том, который Вы в настоящее время используете:
Пойдите, чтобы Представить предпочтения для получения дополнительной информации и проверить название профиля.
Для получения дополнительной информации посмотрите man gnome-terminal
и страницы справочника Ubuntu онлайн.
Примечание:
Если Вы испытываете затруднения при запуске программ с gnome-terminal
, любой добавляет местоположение к $PATH
, или сделайте символьную ссылку и поместите ее в a $PATH
местоположение, или (что было очень полезно здесь): создайте простой сценарий обертки удара и призовите это gnome-terminal
командная строка выше. (Необходимо назвать его с полным путем: т.е. /location/of/script
и не только название его.)
Как пример:
#!/bin/bash
cd $HOME/.rvm/gems/ruby-2.0.0-p0/bin
spork
exit 0
Затем назовите сценарий, сделайте его исполняемым файлом и призовите его gnome-terminal
командная строка выше. Сделайте это для весь не repo программы, которые проблематичны.
gnome-terminal --tab -- sh -c "python3 'test.py' ; bash"
этот код открывает новую вкладку в терминале, запускающем скрипт Python и когда, эта новая вкладка не закроется, потому что я добавил 'удар' в конце этого кода...
, если Вы хотите это многократно, поместите его в некоторое время цикл в Вашем сценарии
удара