Я хочу написать сценарий оболочки, который делает следующее:
- Активируйте виртуальную среду pipenv.
- Запускает
mkdocs serve
, который запускает локальный сервер разработки для моей документации mkdocs.
Если я сделаю наивную вещь и вставлю это в свой сценарий:
cd <my-docs-directory>
pipenv shell
mkdocs serve
это не удается, потому что pipenv shell
«запускает подоболочку в виртуальной среде». Мне нужно передать команду mkdocs serve
в виртуальную оболочку (и желательно приземлиться в той же оболочке после запуска скрипта).
Заранее спасибо!
Отвечать
Ответ Филиппа работает. Вот почему.
pipenv run bash -c 'mkdocs serve ; exec bash --norc'
- Pipenv позволяет запускать команду в виртуальной среде без запуска оболочки:
$ pipenv run <insert command here>
bash -c <insert command here>
позволяет передать команду bash для выполнения$ bash -c "echo hello" hello
exec
служит для замены текущего процесса оболочки командой, так что родитель проходит путь, а дочерний процесс владеет pid. Вот похожий вопрос на AskUbuntu.