0

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

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

如果我做天真的事情并将其放入我的脚本中:

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

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

提前致谢!

回答

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

pipenv run bash -c 'mkdocs serve ; exec bash --norc'
  1. Pipenv 允许您在虚拟环境中运行命令而无需启动 shell:
    $ pipenv run <insert command here>
    
  2. bash -c <insert command here>允许您将命令传递给 bash 以执行
    $ bash -c "echo hello"
    hello
    
  3. exec用于用命令替换当前的 shell 进程,以便父进程走一条路,子进程拥有 pid。这是 AskUbuntu 上的一个相关问题
4

1 回答 1

1

您可以使用此命令:

pipenv run bash -c 'mkdocs serve ; exec bash --norc'
于 2020-05-31T08:57:54.753 回答