执行 chroot 并在 chroot 中执行命令的 Shell 脚本

May*_*uka 9 bash shell chroot

如果在shell脚本中我写

chroot /home/mayank/chroot/codebase
cd SBC
Run Code Online (Sandbox Code Playgroud)

当我运行这个 shell 脚本时,它确实进入chroot但不执行命令cd SBC,当我退出时chroot它会执行cd SBC

如何通过 shell 脚本实现某些功能chroot并执行命令chroot

Ond*_* K. 9

当您在chroot不告诉它要做什么的情况下运行时,它会尝试启动 chroot 交互式 shell 会话。所以你的脚本会在那个时候“暂停”,当你完成那个交互式 shell 会话时,它会再次从 chroot 中继续运行。

一种快速而肮脏的选择是滥用此处的文档,如下所示:

chroot /home/mayank/chroot/codebase /bin/bash <<"EOT"
cd /tmp/so
ls -l
echo $$
EOT
Run Code Online (Sandbox Code Playgroud)

这需要所有行,EOT并将它们输入到bashstarted through 中chroot。那些双引号"EOT"应该确保 bash 传递内容而不是试图扩展变量等。因此,这echo $$应该是内部 chrooted 的 PID bash

  • @AndreyReeshkov您可以使用`&lt;&lt;EOT`而不带双引号,但随后通常的处理(参数扩展、命令替换、算术扩展)发生在调用shell中,并且您必须转义所有要按字面传递给子级的内容过程。 (3认同)