Как передать переменную среды при изменении rooting?

Если вы используете встроенную систему, такую как BusyBox, которая распространена в системах типа OpenWrt, она имеет очень ограниченную функциональность и поддерживает только 2-3 флага.

Если вам нужен быстрый и грязный способ постоянной печати вывода dmesg на экран по мере изменения событий, простой цикл Bash работает отлично. Он не идеален, но, как я уже говорил, в BusyBox dmesg не хватает многих функций. Я обнаружил, что следующее имеет тот же эффект при вводе в командную строку:

$ while true; do dmesg -c ; sleep 1 ; done

Вы можете выйти из цикла с помощью Ctrl + C. Флаг sleep 1 используется для того, чтобы остановить ненужную нагрузку на процессор, а флаг -c очищает буфер при каждом вызове, чтобы вы не видели повторяющийся вывод каждую секунду.

3
20.08.2015, 00:09
5 ответов

Используйте одинарные кавычки:

$ sudo chroot mychroot /bin/bash -c 'MY_VAR=5; echo ${MY_VAR}'
6
29.04.2021, 00:25

Используйте ответ yaegashi или уберите $, например

$ sudo chroot mychroot /bin/bash -c "MY_VAR=5; echo \${MY_VAR}"
4
29.04.2021, 00:25

Я искал способ передать переменную окружения вызовам chroot из debootstrap и заметил, что следующее также работает:

$ sudo MY_VAR=5 chroot mychroot env | grep MY_VAR
MY_VAR=5
0
29.04.2021, 00:25

Какое-то время это действительно раздражало меня. Я пытался передать значения, в которых есть пробелы, например

ЗНАЧ="123 345 567" затем я хочу передать переменную типа THING=$VALUE -, это вызвало у меня бесконечные попытки попробовать все приведенные выше ответы. Единственный, который мог сработать, - это ответы Энди, но моему пользователю не было разрешено пройти окружение. Поэтому после большого вздоха я решил передать файл в свой chroot, что-то вроде:

echo THING=\"$VALUE\" > envvars
mv envars $CHROOT_DIR # What ever your chroot directory is
sudo chroot mychroot /bin/bash -c "source envars; echo \${THING}"

Поскольку сейчас я просто загружаю файл внутри chroot, я могу поместить туда все, что захочу. Это хорошо для сложных переменных env -или для многих из них

1
29.04.2021, 00:25

для оболочки входа -c не работает. но /user/bin/env делает:

chroot /path/to/chroot/dir /usr/bin/env VAR_IN_CHROOT=$MYVAR /bin/bash --login
0
14.06.2021, 19:38

Теги

Похожие вопросы