【问题标题】:bash script starting new shell and continuing to run commands [duplicate]bash脚本启动新shell并继续运行命令[重复]
【发布时间】:2018-06-11 21:38:18
【问题描述】:

我完全不喜欢编写 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。我希望这会有所帮助。

标签: bash shell jupyter-notebook pipenv


【解决方案1】:

根据manual

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