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

Launch bash subshell and run commands in a script

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

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

如果我做一些幼稚的事情并将其放入我的脚本中:

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

它失败了,因为 pipenv shell "launches a subshell in the virtual environment"。我需要将 mkdocs serve 命令传递到虚拟 shell 中(并且最好在 运行 脚本之后降落在同一个 shell 中)。

提前致谢!

回答

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 上的 related question

你可以使用这个命令:

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