Назад | Перейти на главную страницу

Как запустить оболочку bash в ubuntu - сменить каталог, открыть вкладки, запустить команды

Я уверен, что это не должно быть так сложно, как я нахожу!

Когда я вхожу в свою машину, я хочу, чтобы она запускала оболочку bash в заданном каталоге, открывала и называла некоторые вкладки и запускала процесс в каждой из них.

Я думаю, что если я поставлю

cd ~/xxx/xxx/xxx

в .bashrc, а затем автозапустите оболочку bash с чем-то вроде

gnome-terminal --tab -e "bash -c 'rails s'" --tab -e "bash -c 'spork'" --tab -e "bash -c 'autotest'" --tab -e "bash -c 'rails c'" --tab -e 'tail -f log/development.log'

он должен работать

Это не так - я получаю: «Произошла ошибка при создании дочернего процесса для этого терминала. Не удалось выполнить дочерний процесс rails» (Нет такого файла ...

rails находится в пути - как в корневом каталоге, так и в каталоге назначения, и указание полного пути не помогает - окно терминала не открывается.

Обновление: причина, по которой это не работает должным образом, заключается в том, что bashrc не изменяет рабочий каталог до тех пор, пока не будут выполнены команды для запуска процесса. (я могу это увидеть, если сделаю tab -e 'pwd')

Итак, вопрос в том, как мне сменить каталог, а затем запустить процессы?

Есть очень хорошее решение по адресу:

https://stackoverflow.com/questions/3896882/open-gnome-terminal-programmatically-and-execute-commands-after-bashrc-was-execut

Цитируется по ссылке:

Вот хороший трюк, который мы разработали в Superuser

  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 = \ "рельсовый сервер \"; exec bash "'--tab -e' bash -c" export BASH_POST_RC = \ "autotest \"; exec bash "'

@Gilles: Спасибо за это решение!

Используя эту идею, я создал следующий сценарий bash.

gnome-terminal --working-directory = "/ home /"ПОЛЬЗОВАТЕЛЬ/ rails_projects /ПРОЕКТ"--tab --title = Терминал --profile = Rails --tab --profile = Rails --title = Console -e 'bash -c" export BASH_POST_RC = \ "консоль rails \"; exec bash "'--tab --profile = Rails --title = Guard -e' bash -c" export BASH_POST_RC = \ "охрана \"; exec bash "'--tab --profile = Rails --title = Server -e' bash -c" export BASH_POST_RC = \ "rails server \"; exec bash "'--tab --profile = Rails --title = Tail -e' bash -c" export BASH_POST_RC = \ "tail -f log / development.log \"; exec bash "'

.bashrc не вызывается, когда bash позвонил с -c параметр.

Вместо этого вы можете обернуть вызов gnome-terminal в сценарии, который делает cd первый. Некоторым это нравится:

#!/bin/bash
cd ~/xxx/xxx/xxx
gnome-terminal --tab -e "bash -c 'rails s'" --tab -e "bash -c 'spork'" --tab -e "bash -c 'autotest'" --tab -e "bash -c 'rails c'" --tab -e 'tail -f log/development.log'