Как только 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
Хотя я не особо рекомендую делать это таким образом, вас могут заинтересовать методы, упомянутые в разделе
Как запустить терминал с определенным текстом, уже введенным в командной строке? ,
gnome-terminal --geometry=198x44 --working-directory=/home/username/Workspace/project_name --tab --title server -e 'zsh -c "export BASH_POST_RC=\"rails server\"; exec zsh"' --tab --title console -e 'zsh -c "export BASH_POST_RC=\"rails console\"; exec zsh"'
gnome-terminal -e
не вызывает оболочки вообще. Если вы запуститеgnome-terminal -e 'sleep 9'
, он выполнит командуsleep
с аргументом9
, а оболочка не будет задействована. Если выполнить,gnome-terminal -e 'sleep 9;bash'
то терминал открывается и закрывается немедленно, потому чтоsleep
жалуется, что9;bash
это недопустимый интервал времени. Вы можете наблюдать за тем, что происходитstrace -f -eexecve gnome-terminal -e …
Когда вы используете
-e
опцию, командаgnome-terminal
будет запускать эту команду без запуска новой оболочки (вы даже можете запустить что-то вроде:)gnome-terminal -e gedit
, поэтому, если вы хотите запустить команду вbash
оболочку в новый терминал / вкладку, вы должны сделать что-то вроде этого:Но обратите внимание, что когда
"command"
закончится, терминал / вкладка тоже закончится.источник
gnome-terminal -x bash -c "command"
(-e
ожидает один аргумент). И довольно просто выполнить оболочку послеcommand
, по крайней мере, пока вы запускаете одну вкладку - смотрите мой ответ .gnome-terminal -x "bash" -c "command"
работал на меня. Обратите внимание на кавычки на значение -x arg.# Option “-x” is deprecated and might be removed in a later version of gnome-terminal.
`-x
и-e
optons устарели ???~/.bashrc
до выполнения команды, как первоначально было задано ОП.