我正在使用virtualenv
(设置一些环境变量)。现在,我想生成一个具有相同环境的新终端窗口。如果我尝试:
xterm &
我得到一个新的终端,但环境是默认环境,就是当我在新终端上输入以下行时:
pserve --reload development.ini
我明白了:
>> pserve: Command not found.
另一方面,如果我执行:
xterm -e pserve --reload development.ini &
它打开一个运行pserve的新终端。所以,我的问题是:
pserve
开关运行时,新终端如何找到-e
?答案 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
我得到一个新的终端窗口,具有相同的环境
希望这有帮助
注意: