bash脚本执行pipenv shell后无法继续运行后续命令的解决办法
解决pipenv shell启动后脚本后续命令暂停的问题
嘿,我刚入门写bash脚本的时候也踩过这个一模一样的坑!让我给你掰扯清楚原因和解决办法:
问题根源
pipenv shell 会启动一个交互式的子shell,你的主脚本会暂停执行,直到你手动退出这个子shell,才会继续跑后面的命令——这就是为什么你退出后才看到剩余命令执行的原因。
两种可行的解决方案
方案1:用pipenv run直接执行命令(推荐)
不需要进入交互式shell,直接用pipenv run在虚拟环境的上下文里执行后续命令,这样脚本就能一路跑到底:
#!/bin/bash mkdir New_Project cd New_Project pipenv install ipykernel # 用pipenv run包裹命令,直接在虚拟环境中执行 pipenv run python -m ipykernel install --user --name=new-virtual-env pipenv run jupyter notebook
这个方法最适合自动化脚本,完全避免了交互式shell的干扰。
方案2:通过Here-Doc让子shell执行命令
如果你确实需要在子shell里批量执行命令,可以用Here-Doc( heredocument)把要执行的命令传递给pipenv shell,这样子shell会自动执行这些命令,完成后退出:
#!/bin/bash mkdir New_Project cd New_Project pipenv install ipykernel # 用EOF包裹要在子shell中执行的命令 pipenv shell << EOF python -m ipykernel install --user --name=new-virtual-env jupyter notebook EOF
注意:jupyter notebook是交互式程序,执行后会停在那里,关闭jupyter窗口后子shell才会退出,脚本也会随之结束。
额外小提示
为了让脚本更健壮,可以在开头加上set -e,这样如果任何命令执行失败(比如mkdir或cd出错),脚本会立即停止,避免后续命令在错误的环境下执行:
#!/bin/bash set -e # 命令出错时立即退出脚本 mkdir New_Project cd New_Project pipenv install ipykernel pipenv run python -m ipykernel install --user --name=new-virtual-env pipenv run jupyter notebook
试试上面的方法,应该就能让你的脚本从头到尾完整执行啦!
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

