从脚本中退出 chroot

从脚本中退出 chroot

我的脚本创建了一个chroot笼子来将 GRUB 安装到 USB,当然以 sudo 运行:

SYSTEM_DIRS=(etc bin sbin var lib lib64 usr proc sys dev tmp)

boot_partition=/media/user/boot

for dir in ${SYSTEM_DIRS[@]}; do
  mount --bind /$dir ${boot_partition}/${dir}
done

然后执行里面的一些命令chroot

chroot ${boot_partition}/ touch foo # works fine
...

但是当我想执行命令时exit

chroot ${boot_partition}/ exit

我得到:

chroot: failed to execute the command <<exit>>: No such file or directory

为什么会发生这种情况并且有办法解决它吗?

答案1

exit是一个内置的 shell,而不是独立的可执行文件,这意味着它不能由chroot.然而,即使可以,你的命令也不会执行任何操作。

此命令在 chroot/executable上下文中运行/path

chroot /path /executable

它不会将调用者留在该 chroot 内;运行完成后就会隐式退出/executable

mkdir -p /tmp/cr/{bin,lib,lib64}
cp -p /bin/pwd /tmp/cr/bin
cp -p $(find /lib* /usr/lib* -name 'libc.so*') /tmp/cr/lib
cp -p $(find /lib* /usr/lib* -name 'ld-linux-x86-64.so*') /tmp/cr/lib64

/bin/pwd                   # "/root"
chroot /tmp/cr /bin/pwd    # "/"
/bin/pwd                   # "/root"

答案2

我遇到同样的问题,我的解决方案是当你执行 chroot 时,在其后附加 exit :

chroot /chroot_path && exit

那么如果用户退出 chroot,将退出整个 shell

相关内容