Запустите подоболочку bash и выполните команды в сценарии

Я хочу написать сценарий оболочки, который делает следующее:

  1. Активируйте виртуальную среду pipenv.
  2. Запускает mkdocs serve, который запускает локальный сервер разработки для моей документации mkdocs.

Если я сделаю наивную вещь и вставлю это в свой сценарий:

cd <my-docs-directory>
pipenv shell
mkdocs serve

это не удается, потому что pipenv shell «запускает подоболочку в виртуальной среде». Мне нужно передать команду mkdocs serve в виртуальную оболочку (и желательно приземлиться в той же оболочке после запуска скрипта).

Заранее спасибо!

Отвечать

Ответ Филиппа работает. Вот почему.

pipenv run bash -c 'mkdocs serve ; exec bash --norc'
  1. Pipenv позволяет запускать команду в виртуальной среде без запуска оболочки:
    $ pipenv run <insert command here>
    
  2. bash -c <insert command here> позволяет передать команду bash для выполнения
    $ bash -c "echo hello"
    hello
    
  3. exec служит для замены текущего процесса оболочки командой, так что родитель проходит путь, а дочерний процесс владеет pid. Вот похожий вопрос на AskUbuntu.

person AS_Butler    schedule 30.05.2020    source источник


Ответы (1)


Вы можете использовать эту команду:

pipenv run bash -c 'mkdocs serve ; exec bash --norc'
person Philippe    schedule 31.05.2020