34

Для запуска моей среды разработки я написал небольшой скрипт. Одна часть состоит в том, чтобы открыть терминал гнома с несколькими вкладками, где автоматически должны быть выполнены некоторые команды. Некоторые из этих команд зависят от уже выполненного .bashrc. Но при использовании

gnome-terminal --tab -e "command" --tab --tab

команда выполняется до .bashrc. Есть ли возможность заставить автоматический терминал gnome -e вести себя как используемый вручную? (даже команды типа "cd /foo /bar" не работают с gnome-terminal -e)

2 ответа2

42

Как только gnome-терминал запустил bash, он вышел из цикла в том, что касается выполнения команды: он только управляет вводом и выводом. Поэтому вам понадобится сотрудничество bash для запуска чего-либо после загрузки ~/.bashrc .

Во-первых, во многих случаях вам не нужно выполнять команды после ~/.bashrc . Например, открыть терминал в определенном каталоге можно просто с помощью cd /foo/bar && gnome-terminal . Вы можете установить переменные окружения аналогичным образом: VAR=value gnome-terminal . (Если ваш ~/.bashrc переопределяет переменные окружения, вы делаете это неправильно: определения переменных окружения находятся в ~/.profile)

Для выполнения команд в терминале, но перед ~/.bashrc , вы можете сделать

gnome-terminal -x sh -c 'command1; command2; exec bash'

Если вы хотите использовать несколько вкладок, вы должны использовать -e вместо -x . Gnome-терминал бесполезно разбивает аргумент -e на пробелы, а не выполняет его через оболочку. Тем не менее, вы можете написать команду оболочки, если убедитесь, что в нее не включены пробелы. По крайней мере, в gnome-Terminal 2.26 вы можете использовать вкладки (замените <TAB> буквальным символом табуляции):

gnome-terminal -e 'sh -c command1;command2;exec<TAB>bash'
gnome-terminal --tab -e 'sh -c command1;<TAB>exec<TAB>bash' \
               --tab -e 'sh -c command2;<TAB>exec<TAB>bash'

Если вам нужно запускать команды после ~/.bashrc , заставьте его запускать команды. Например, включите следующий код в конец ~/.bashrc:

eval "$BASH_POST_RC"

Затем, чтобы запустить некоторый код после (действительно, в конце) вашего bashrc:

gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'

или (менее тяжелый по цитированию)

BASH_POST_RC='command1; command2' gnome-terminal

Хотя я не особо рекомендую делать это таким образом, вас могут заинтересовать методы, упомянутые в разделе Как запустить терминал с определенным текстом, уже введенным в командной строке? ,

6

Когда вы используете опцию -e gnome-terminal будет запускать эту команду без запуска новой оболочки (вы даже можете запустить что-то вроде: gnome-terminal -e gedit), так что если вы хотите запустить команду в оболочке bash в новый терминал / вкладка, вы должны сделать что-то вроде этого:

gnome-terminal -x bash -c "command"

Но обратите внимание, что когда "command" заканчивается, терминал / вкладка тоже заканчивается.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .