скрипт bash, запускающий новую оболочку и продолжающий выполнять команды

Я полный нуб в написании 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 он запускает новую оболочку, а затем не выполняет последние две команды. Когда я выхожу из новой оболочки, она пытается выполнить оставшиеся строки. Есть ли способ заставить скрипт запускать все эти команды от начала до конца?


person Austin    schedule 02.01.2018    source источник
comment
Вы можете войти в venv с помощью source $(pipenv --venv)/bin/activate. Это активирует виртуальную среду, которую вы создали с помощью pipenv install, не открывая новую оболочку (что и делает pipenv shell). Затем вам нужно использовать deactivate (не exit), чтобы остановить venv. Надеюсь, это поможет.   -  person msoutopico    schedule 22.03.2021


Ответы (1)


Согласно руководству:

shell создаст оболочку с активированным virtualenv.

что это не то, что вам нужно. Вместо этого используйте run :

run запустит заданную команду из virtualenv с переадресацией любых аргументов (например, $ pipenv run python).

В вашем случае что-то вроде

pipenv run python -m ipykernel install --user --name==new-virtual-env
person sjsam    schedule 02.01.2018
comment
Спасибо за ответ! просто чтобы уточнить, pipenv run будет запускать любую команду оболочки, т.е. pipenv run scrapy и т. д., а не только python - person mand; 20.07.2020