Открытие нескольких вкладок с помощью gnome-терминала

16

Я пытаюсь создать команду, которая откроет 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' (на вкладке показан работающий сервер).

Есть идеи?

Manuel
источник

Ответы:

9

Ниже приведен ответ от stackoverflow.com

  1. Добавьте eval "$BASH_POST_RC"в конец вашего .bashrc

  2. Установите 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"'

зеленый
источник
15

Вызов 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, либо создайте символическую ссылку и поместите ее в это $PATHместо, либо (что было очень полезно здесь): создайте простой скрипт-оболочку bash и вызовите его в gnome-terminalкомандной строке выше. (Вы должны называть его с абсолютным путем: то есть, /location/of/scriptа не только его именем.)

В качестве примера:

#!/bin/bash
cd $HOME/.rvm/gems/ruby-2.0.0-p0/bin 
spork
exit 0

Затем назовите сценарий, сделайте его исполняемым и вызовите его в gnome-terminalкомандной строке выше. Сделайте это для всех проблемных программ, которые не являются репо.

Десерт
источник
Как мне узнать профиль? (Я пробовал с Default, моим именем пользователя и ~ / .profile)
Мануэль
Там написано «По умолчанию», но я получаю ту же ошибку, используя --tab-with-profile = «По умолчанию»
Мануэль
@Manuel Другая возможность заключается в том, что целевые команды не находятся в вашем $PATHраспоряжении, укажите местоположение, sporkа остальные - с абсолютным путем.
Я использую команду: gnome-terminal --tab --title = "rails s" -e "rails s" --tab-with-profile = По умолчанию --title = "spork" -e "spork" - tab-with-profile = По умолчанию --title = "autotest" -e "autotest" (скопировать / вставить из вашего ответа). О $ PATH, если это проблема, то почему она работает на вкладке, открытой через меню?
Мануэль
@ Manuel Как вы говорите в своем вопросе, вы должны перейти в «папку приложения» и запустить их оттуда, а это означает, что они не находятся в $PATH. В ответе используется тот метод, который я использую для запуска всех установленных в репозитории программ командной строки на разных вкладках в одном gnome-terminalи том же окне, и он всегда работает, так как эти другие программы находятся в $ PATH.
0

gnome-terminal --tab -- sh -c "python3 'test.py' ; bash"

этот код открывает новую вкладку в терминале, на котором выполняется скрипт python, и когда он закончится, эта новая вкладка не закроется, потому что я добавил 'bash' в конце этого кода ...

если вы хотите это несколько раз, поместите это в цикл while в вашем скрипте bash

Жоао Витор Деон
источник