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

Reply via email to