Answers:
一旦gnome-terminal开始执行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-terminal会无助地拆分-e
at 参数,而不是通过shell执行。但是,如果确保不在其中包含空格,则可以编写shell命令。至少在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
根本不调用shell。如果运行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
外壳中的新终端/选项卡中,则必须执行以下操作:
gnome-terminal -x bash -c "command"
但是请注意,"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
弃用以来,我们该怎么办???
~/.bashrc
像OP最初要求的那样在执行命令之前运行。