On 04/02/2018 03:29 AM, Bas Zoutendijk wrote:
> On Mon 2 Apr 2018 at 10:25:45 +0200, David Haller wrote:
>> You owe me a dollar!
>>
>> export PS1="$(chroot '$HOST') $PS1";
>> ^
>
> The text within the parentheses was meant as literal text, the chroot
> command is executed rightward of the pipe. I could just as well write
>
> echo 'export PS1="You have chrooted into '$HOST' from $PS1"; exec
> <dev/tty' | exec chroot $ROOT /bin/bash -i
>
> No dollars necessary.
>
> Sincerely,
>
> Bas
>
Here is original script, to boot-strap computer over nfs (it WORKS!)
----------
#!/bin/sh
set -x
HOST=${0##*/}
HOST=${HOST#*-}
ROOT=/mnt/${HOST}
PS1="${HOST}"
mkdir -p --mode=0755 "${ROOT}"
#env -i - HOME="/root" TERM="${TERM}" exec sudo unshare -m /bin/sh -c "
exec sudo unshare -m /bin/sh -c "
set -e
mount -t nfs -o rw,noatime,nocto,actimeo=60,lookupcache=positive,vers=4,fsc
'${HOST}:/' '${ROOT}'
mount --bind {,'${ROOT}'}/dev
mount --bind {,'${ROOT}'}/dev/pts
mount --bind {,'${ROOT}'}/dev/shm
mount --bind {,'${ROOT}'}/proc
mount --bind {,'${ROOT}'}/sys
mount --bind {,'${ROOT}'}/usr/local/portage
mount --bind {,'${ROOT}'}/usr/portage
mount --bind {,'${ROOT}'}/var/cache/edb/dep
mount --bind {,'${ROOT}'}/var/tmp/portage
exec chroot '${ROOT}' /bin/bash -i
env-update
source /etc/profile
"
--------------------
The above script works when I run
chroot-eden - which is a just a link to chroot.sh
Not sure if these two lines are needed, but it works with or without them:
env-update
source /etc/profile
---result-----
syscon3 /home/thelma # sh chroot-eden
+ HOST=chroot-eden
+ HOST=eden
+ ROOT=/mnt/eden
+ PS1=eden
+ mkdir -p --mode=0755 /mnt/eden
+ exec sudo unshare -m /bin/sh -c '
set -e
mount -t nfs -o rw,noatime,nocto,actimeo=60,lookupcache=positive,vers=4,fsc
'\''eden:/'\'' '\''/mnt/eden'\''
mount --bind {,'\''/mnt/eden'\''}/dev
mount --bind {,'\''/mnt/eden'\''}/dev/pts
mount --bind {,'\''/mnt/eden'\''}/dev/shm
mount --bind {,'\''/mnt/eden'\''}/proc
mount --bind {,'\''/mnt/eden'\''}/sys
mount --bind {,'\''/mnt/eden'\''}/usr/local/portage
mount --bind {,'\''/mnt/eden'\''}/usr/portage
mount --bind {,'\''/mnt/eden'\''}/var/cache/edb/dep
mount --bind {,'\''/mnt/eden'\''}/var/tmp/portage
exec chroot '\''/mnt/eden'\'' /bin/bash -i
env-update
source /etc/profile
'
syscon3 / #
----end result----
The above execution shows that "PS1=eden" but the prompt shows: "syscon3 / #"
(not eden).
I've tried the below lines they don't work, I get a syntax error:
1.)
echo 'export PS1="$(chroot '$HOST') $PS1"; exec <dev/tty' | exec chroot $ROOT
/bin/bash -i
+ HOST=chroot-eden
+ HOST=eden
+ ROOT=/mnt/eden
+ PS1=eden
+ mkdir -p --mode=0755 /mnt/eden
chroot-eden: line 31: syntax error near unexpected token `('
chroot-eden: line 31: `# echo 'export PS1="(chroot '$HOST') $PS1"; exec
<dev/tty' | exec chroot $ROOT /bin/bash -i'
2.)
echo 'export PS1="You have chrooted into '$HOST' from $PS1"; exec <dev/tty' |
exec chroot $ROOT /bin/bash -i
+ HOST=chroot-eden
+ HOST=eden
+ ROOT=/mnt/eden
+ PS1=eden
+ mkdir -p --mode=0755 /mnt/eden
chroot-eden: line 31: syntax error near unexpected token `('
chroot-eden: line 31: `# echo 'export PS1="(chroot '$HOST') $PS1"; exec
<dev/tty' | exec chroot $ROOT /bin/bash -i'
3.)
echo 'export PS1="(chroot '$HOST') $PS1"; exec <dev/tty' | exec chroot $ROOT
/bin/bash -i
+ HOST=chroot-eden
+ HOST=eden
+ ROOT=/mnt/eden
+ PS1=eden
+ mkdir -p --mode=0755 /mnt/eden
chroot-eden: line 31: syntax error near unexpected token `('
chroot-eden: line 31: ` echo 'export PS1="(chroot '$HOST') $PS1"; exec
<dev/tty' | exec chroot $ROOT /bin/bash -i'
--
Thelma