我在 Ubuntu 上启动了一个新终端,并希望在打开后激活 Python 虚拟环境。通常通过运行以下命令激活虚拟环境:
source ./environment/bin/activate
我的虚拟环境被称为environment
。
我用来执行此操作的命令是:
gnome-terminal --geometry 160x80+-26+4 --working-directory=/home/user/Work/project -x bash -c "source /home/user/Work/project/environment/bin/activate; exec bash"
激活脚本的路径是正确的,但是当我启动终端时虚拟环境并没有被激活。
我怀疑这是因为源在一个 bash 实例中运行,但exec bash
为了保持终端打开而创建了一个新的实例(这里只是一个假设)。
我如何才能让source
命令影响这个新终端并使其保持打开状态?
答案1
我如何让源命令影响该新终端并使其保持打开状态?
在获取所选文件时启动交互式 shell 的更正确方法是使用语法bash --rcfile ...
:
该选项将强制 Bash 从而不是
--rcfile file
读取并执行命令。file
~/.bashrc
使用方式如下:
gnome-terminal --geometry 160x80+-26+4 \
--working-directory=/home/user/Work/project \
-- bash --rcfile /home/user/Work/project/environment/bin/activate
你不需要使用-x
(该选项已弃用),但--
在命令前使用。
激活脚本的路径是正确的,但是当我启动终端时虚拟环境并没有被激活。
尽管提示没有显示出来,但您的虚拟环境很可能已经被激活,并且您可以使用例如which python3
指向虚拟环境目录中的 Python3 可执行文件来验证。
我怀疑这是因为 source 在一个 bash 实例中运行,但 exec bash 创建了一个新的实例以保持终端打开(这里只是一个假设)。
你是对的,exec bash
替换第一个(非交互式 shell) 和另外一个(交互式 shell 采购~/.bashrc
)...你可以用以下方法修补:
gnome-terminal --geometry 160x80+-26+4 \
--working-directory=/home/user/Work/project \
-- bash -ic "source /home/user/Work/project/environment/bin/activate; exec bash --norc"