启动 systemd-nspawn 并在里面执行命令

Mar*_*ark 4 linux bash command-line systemd

我没有找到这样的问题。我有一个启动systemd-nspawn会话的 bash 脚本(在 Debian 中运行)。之后,我想在生成的机器中继续我的脚本:

#!/bin/bash
systemd-nspawn -q --bind /usr/bin/qemu-arm-static -D /mnt/project /bin/bash

apt-get update
apt-get -y upgrade
Run Code Online (Sandbox Code Playgroud)

执行systemd-nspawn命令后,脚本被挂起,控制台的提示在生成的系统内部。当我退出脚本恢复但在本地机器中。

小智 5

解决问题的几种方法:

  1. 制作一个在 systemd-nspawn 容器中执行的脚本,并将您希望运行的命令放在那里 ( systemd-nspwan -D .. /your-script)。如果您想在运行命令后获得交互式 shell,请exec bash -i在 script 末尾放置类似的内容。

  2. 如果你想保留你当前的脚本,你可以提供你的命令作为 bash 的输入:

    #!/bin/bash
    systemd-nspawn -q --bind /usr/bin/qemu-arm-static -D /mnt/project /bin/bash << EOF
    apt-get update
    apt-get -y upgrade
    EOF
    
    Run Code Online (Sandbox Code Playgroud)

    如果您之后不需要交互式外壳,这可以正常工作。

  • 在 2019 年,我认为您必须通过 `systemd-nspawn --pipe` 才能使其工作。 (2认同)