启动bash子shell并在脚本中运行命令

时间:2020-05-30 21:34:22

标签: bash pipenv mkdocs

我想编写一个执行以下操作的shell脚本:

  1. 激活pipenv虚拟环境
  2. 运行mkdocs serve,为我的mkdocs文档启动本地开发服务器

如果我做过幼稚的事情并将其放在我的脚本中:

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

它失败是因为pipenv shell“在虚拟环境中启动了一个子shell”。我需要将mkdocs serve命令传递到虚拟外壳程序中(最好在运行脚本后进入同一外壳程序中)。

谢谢!

答案

Philippe的答案有效。这就是为什么。

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用于用命令替换当前的shell进程,以便父级执行某种方式,子级拥有pid。这是AskUbuntu上的related question

1 个答案:

答案 0 :(得分:1)

您可以使用以下命令:

pipenv run bash -c 'mkdocs serve ; exec bash --norc'