Bash脚本启动新shell并继续运行命令。

12

我对编写Bash脚本一窍不通。我正在尝试做以下操作:

#!/bin/bash

mkdir New_Project
cd New_Project
pipenv install ipykernel
pipenv shell
python -m ipykernel install --user --name==new-virtual-env
jupyter notebook

我遇到的问题是,在执行pipenv shell后,它会启动新的shell,然后不执行最后两个命令。当我退出新的shell时,它才尝试执行剩下的行。是否有任何方法可以让脚本从头到尾运行所有这些命令?


你可以使用 source $(pipenv --venv)/bin/activate 命令进入 venv。这将激活你使用 pipenv install 创建的虚拟环境,而不会打开一个新的 shell(这是 pipenv shell 所做的)。然后,你需要使用 deactivate 命令(而不是 exit)来停止 venv。希望这能帮到你。 - msoutopico
1个回答

13

根据手册

使用shell会启动一个带有virtualenv的Shell。

这不是你需要的。相反,使用run

run将在virtualenv中运行给定的命令,并转发任何参数(例如$ pipenv run python)。

在您的情况下,类似于:

pipenv run python -m ipykernel install --user --name==new-virtual-env

谢谢你的回答!只是澄清一下,pipenv run可以运行任何Shell命令,例如pipenv run scrapy等,而不仅仅是Python。 - mand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接