我的脚本创建了一个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