如果在shell脚本中我写下:
chroot /home/mayank/chroot/codebase
cd SBC
当我运行这个shell脚本时,它确实进入了chroot
但没有执行命令cd SBC
,当我退出chroot
时,它才执行cd SBC
。
如何通过shell脚本实现在chroot
中执行命令的目的?
当你运行chroot
命令时,如果没有指定具体执行内容,它会尝试启动一个在chroot
环境下的交互式shell会话。因此,在这个点上,你的脚本会“暂停”,直到你完成该交互式shell会话后,它才会跳出chroot
环境继续执行。
其中一个快速而且不太正规的方法是滥用here-document,像这样:
chroot /home/mayank/chroot/codebase /bin/bash <<"EOT"
cd /tmp/so
ls -l
echo $$
EOT
该命令将所有行直到EOT
全部读入,并通过chroot
启动的bash
进行处理。那些围绕在"EOT"
周围的双引号将确保bash传递内容时不会尝试扩展变量等内容。因此,echo $$
应该是被chroot限制的内部bash
的PID。
<<EOT
,但是在调用shell时会进行常规处理(参数扩展、命令替换、算术扩展),因此你必须转义所有要传递给子进程的内容。 - Ondrej K.我找到了一个解决方案,
在chroot之后,我提供了一个脚本,它对我来说运行良好。
test.sh位于chroot文件夹中。 test.sh中的所有命令将在chroot文件夹中执行。
所以基本上是在chroot之后给出一个命令。
man chroot
chroot [OPTION] NEWROOT [COMMAND [ARG]...]
chroot /home/whatever "COMMAND"
命令。chroot
后面可以跟命令。 - KentCOMMAND
可以在 chroot 中执行脚本。 - stark