Shell Script that does chroot and execute commands in chroot

Mayank Kataruka picture Mayank Kataruka · Jul 12, 2018 · Viewed 9.4k times · Source

If in shell script I write

chroot /home/mayank/chroot/codebase
cd SBC

when I run this shell script It does go in the chroot but does not execute the command cd SBC, when I exit chroot then it executes cd SBC.

How can I achieve something that does chroot and execute commands in chroot through shell script ??

Answer

Ondrej K. picture Ondrej K. · Jul 12, 2018

When you run chroot without telling it what to do, it will try to start chrooted interactive shell session. So your script would "pause" at that point and when you are done with that interactive shell session, it continues out of chroot again.

One of the quick and dirt options would be to abuse here-document, like this:

chroot /home/mayank/chroot/codebase /bin/bash <<"EOT"
cd /tmp/so
ls -l
echo $$
EOT

Which takes all lines up to EOT and feeds them into bash started through chroot. Those double quotes around "EOT" should ensure bash passes the content not trying to expand variables and such. Hence that echo $$ should be PID of the inner chrooted bash.