以编程方式打开gnome终端并在执行bashrc后执行命令

Modified on: Mon, 18 Mar 2019 18:00:02 +0800

为了开始我的开发环境,我写了一个小脚本。一部分是打开一个带有几个选项卡的gnome终端,其中自动执行一些命令。其中一些命令依赖于已执行的.bashrc。
但是在使用时

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

在.bashrc执行之前执行命令。
是否有可能使自动gnome-terminal -e表现得像手动使用? (甚至像“cd / foo / bar”这样的命令也不适用于gnome-terminal -e)

作者:Zardoz

最佳答案

一旦gnome-terminal启动了bash,就命令执行而言它就不在循环中了:它只管理输入和输出。因此,在加载~/.bashrc之后,你需要bash的合作才能运行。

首先,在许多情况下,您实际上不需要在~/.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的参数,而不是通过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之后运行命令,请使用 it 运行命令。例如,在~/.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

虽然我不特别建议这样做,但您可能对提到的技术感兴趣
如何开始已在命令行输入某些文本的终端?

作者:Community,Gilles

相关问答

添加新评论