如何定义激活Python virtual environment时使用的自定义提示?
我有一个bash脚本用于激活我在调用特定Fabric命令时使用的virtualenv。我希望shell提示符说出类似“(fab)”的内容,这样我就可以轻松地将它与我打开的其他shell区分开来。在this示例之后,我尝试过:
#!/bin/bash
script_dir=`dirname $0`
cd $script_dir
/bin/bash -c ". .env/bin/activate; PS1='(fab) '; exec /bin/bash -i"
但提示没有变化。我做错了什么?
答案 0 :(得分:2)
提示符在virtualenv的激活脚本中设置(位于virtualenv下的bin文件夹中)。如果您只想稍微更改提示,可以在调用activate之前设置环境变量(确保在相应的deactivate文件中清除它)。如果您只是希望提示始终不同,您可以在激活处看起来像
一样。set "PROMPT=(virtualenvname) %PROMPT%"
如果你正在使用virtualenvwrapper,你也可以在postactivate和postdeactivate脚本中完成所有这些。
答案 1 :(得分:0)
我无法通过作为子进程执行的脚本找到任何方法。调用单独的bash进程似乎忘记了先前设置的任何PS1
。但是,如果我只是采购脚本,那么结果是微不足道的:
#!/bin/bash
script_dir=`dirname $0`
cd $script_dir
. .env/bin/activate
PS1="(fab) "
答案 2 :(得分:0)
出现
exec /bin/bash -i
正在重置PS1变量。我跑的时候
export PS1="foo "; bash
它也会重置它。奇怪的是,当我查看bash源(shell.c和variables.c)时,似乎使用了
set_if_not ("PS1", primary_prompt);
初始化它。但我不确定这和main()之间发生了什么。放弃。
答案 3 :(得分:0)
我也尝试了cygwin和linux(RedHat CentOS)。我找到了两者的解决方案。
<强> CYGWIN 强>
经过一番调查后我发现问题是PS1是由/etc/bash.bashrc设置的,它覆盖了PS1 env.var。因此,您需要禁用以使用以下命令运行此文件:
/bin/bash -c ". .env/bin/activate; PS1='(fab) ' exec /bin/bash -i --norc"
或
/bin/bash -c ". .env/bin/activate; export PS1='(fab) '; exec /bin/bash -i --norc"
<强> LINUX 强>
它更简单:
/bin/bash -c ". .env/bin/activate; PS1='(fab) ' exec /bin/bash -i"
或
/bin/bash -c ". .env/bin/activate; export PS1='(fab) '; exec /bin/bash -i"
如果您正在调用的脚本没有导出变量(我认为它没有)并且环境中没有出现设置变量,那么您可以尝试这样的事情:
/bin/bash -c "PS1='(fab) ' exec /bin/bash --rcfile .env/bin/activate; "
我希望我能帮忙!