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

时间:2012-09-09 11:52:35

标签: linux shell virtualenv

我正在使用virtualenv(设置一些环境变量)。现在,我想生成一个具有相同环境的新终端窗口。如果我尝试:

xterm &

我得到一个新的终端,但环境是默认环境,就是当我在新终端上输入以下行时:

pserve --reload development.ini

我明白了:

>> pserve: Command not found.

另一方面,如果我执行:

xterm -e pserve --reload development.ini &

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

  1. 如何一般打开具有相同环境的新终端
  2. 当我使用pserve开关运行时,新终端如何找到-e

2 个答案:

答案 0 :(得分:3)

要回答你的第一个问题,快速而肮脏的方法是使用sh builtin'set'命令(更多请参阅'help set')。

来自旧壳:

set > ~/env.tmp

然后

xterm &

来自新shell:

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

您可能希望将其包装在脚本中或在“bash.rc”中添加几个函数。您可能还想使用'mktemp(1)'或类似的。

答案 1 :(得分: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-only但也应该与其他终端一起工作(即使我只在xterm上测试过它)
  • 这可能会破坏多用户系统,但对桌面/笔记本电脑配置来说已经足够了