Mayank Kataruka
Mayank Kataruka

Reputation: 485

Shell Script that does chroot and execute commands in chroot

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 ??

Upvotes: 22

Views: 24751

Answers (2)

Mayank Kataruka
Mayank Kataruka

Reputation: 485

somewhat I found a solution,

chroot /work3/tmp_GU/$build_env/sbcbuild/chroot ./test.sh

after chroot giving a script there is working fine for me.

test.sh present in the chroot folder. All commands in test.sh will be executed in chroot folder.

So basically giving a command after chroot

man chroot

chroot [OPTION] NEWROOT [COMMAND [ARG]...]

Upvotes: 7

Ondrej K.
Ondrej K.

Reputation: 9664

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.

Upvotes: 24

Related Questions