$ sudo -u $USER bash -c 'x=hello; echo "#$x#${x}#"'
#hello#hello#
$ sudo -u $USER -i bash -c 'x=hello; echo "#$x#${x}#"'
##hello#
Vagyis ha van -i (vagy -s) opció, akkor a sudo megsemmisíti a $x-et, de meghagyja a ${x} -et.
- NevemTeve blogja
- A hozzászóláshoz be kell jelentkezni
Hozzászólások
Mindkét opció esetén az env-hez fordul. Ott meg akármi is lehet...
Másrészt a pedáns programozásnál illik kiírni a {} védelmet. Ennek az egyik alapvető célja az, hogy a shell számára vitás esetekben támogassa a döntést: Mi van odaírva? ;)
Ez hasonló az ".." védelemhez. Az is általában elhagyható, de biztosabb, ha odaírod.
- A hozzászóláshoz be kell jelentkezni
A $x helyére a bash-nek az environmentjéből kerül be az eredmény:
$ sudo -i x=hi bash -c 'x=hello; echo ",$x,${x},"'
,hi,hello,
Szóval szerintem valami olyasmi lehet, hogy maga a bash parancs is egy shellben indul, ami nem érti a ${x} szintaxist.
Ha valaki megérti mért, az írja ide, mert mindenképp érdekes :)
- A hozzászóláshoz be kell jelentkezni
Csak akkor jelentkezik a probléma, ha van -i vagy -s opció; ilyenkor még egy további bash (illetve login-shell) hívás van a láncban, még egy további escape-eléssel megspékelve. Esetleg izgalmas lehet strace-szel próbálni és megcsodálni. Pl.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni