2

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

xterm &

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

pserve --reload development.ini

我得到:

>> pserve: Command not found.

另一方面,如果我执行:

xterm -e pserve --reload development.ini &

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

  1. 一般如何在相同环境下打开一个新的终端
  2. pserve当我使用-eswitch运行新终端时,它如何找到?
4

2 回答 2

4

要回答您的第一个问题,一种快速而肮脏的方法是使用 sh 内置的“设置”命令(更多信息请参见“帮助设置”)。

从旧外壳:

set > ~/env.tmp

然后

xterm &

从新外壳:

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

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

于 2012-09-09T12:00:43.483 回答
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 上测试过)
  • 这可能会在多用户系统中中断,但对于台式机/笔记本电脑配置来说已经足够了
于 2013-03-20T10:35:44.187 回答