如何用相同的环境产生一个新的xterm

我使用的是virtualenv (它设置了一些环境variables)。 现在,我想产生一个具有相同环境的新terminal窗口。 如果我尝试:

 xterm & 

我得到一个新的terminal,但环境是默认的环境,即当我在新的terminal上input以下行:

 pserve --reload development.ini 

我得到:

 >> pserve: Command not found. 

另一方面,如果我执行:

 xterm -e pserve --reload development.ini & 

它打开一个运行pserve的新terminal。 所以,我的问题是:

  1. 一般如何在同一个环境下开辟一个新的terminal
  2. 当我使用-e开关运行时,新terminal如何findpserve

要回答你的第一个问题,一个快速和肮脏的方法是使用sh内建“set”命令(更多参见'help set')。

从旧壳:

 set > ~/env.tmp 

然后

 xterm & 

从新的外壳:

 . ~/env.tmp && rm ~/env.tmp 

你可能想把它包装在一个脚本中,或者在你的'bash.rc'中添加一些函数。 您可能还想使用“mktemp(1)”或类似的。

遵循@dmp的建议,我添加到我的〜/ .bashrc中:

 # save the environment, apart from readonly variables that can not be restored alias cloneterm='set |egrep -v "^(BASHOPTS|BASH_COMPLETION_COMPAT_DIR|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID)=" > /tmp/env.tmp && $TERM &' # restore a previously saved environment, if any [ -f /tmp/env.tmp ] && source /tmp/env.tmp [ -f /tmp/env.tmp ] && rm /tmp/env.tmp 

现在我可以简单地运行

 $ cloneterm 

我得到一个新的终端窗口,具有相同的环境

希望这可以帮助

笔记:

  • 这只是bash而已,但也应该与其他终端一起工作(即使我只在xterm上测试过)
  • 这可能会在多用户系统中突破,但对桌面/笔记本电脑配置来说已经足够了