глобальная Linux-оболочка linux в переменной памяти – из оболочки
Есть ли способ установить переменную env без редактирования файлов, которые будут находиться в памяти, а также повлиять на другие оболочки, которые вступят в силу для любого нового пользователя, который подключает этот компьютер и вступит в силу только после следующей перезагрузки Linux-машины?
Я пытаюсь вспомнить что-то в своем linux, которое будет эффективным (из сценария) только на время, когда машина вверх (я не хочу файл по этой причине), поэтому из моей оболочки я хочу установить некоторый флаг, который будет действительным для любого пользователя, подключающегося как:
- В чем разница между env, setenv, export и когда использовать?
- Bash - переменная Shell получает повышенную переменную окружения в процессе child bash
- / usr / bin / env как shebang - и его последствия для безопасности
- Что такое переменная среды?
- Почему изменение $ PATH влияет на дочерние оболочки, но с изменением $ foo нет?
linux_test_run=yes
однако я хочу, чтобы он был эффективным для любой новой оболочки, открытой на этом Linux. и я хочу, чтобы в следующий раз кто-то перезагрузит эту машину, эта переменная исчезнет …
Любой (простой) для меня, чтобы достичь этого? (без использования файлов …)
4 Solutions collect form web for “глобальная Linux-оболочка linux в переменной памяти – из оболочки”
Ну, файлы в /tmp
обычно очищаются при перезагрузке, поэтому почему бы нет источника какого-либо скрипта там файла, что-то вроде строк «если этот файл существует, его источник»? Затем вы можете сделать свою инициализацию в этом файле по мере необходимости. Это может быть помещено в некоторый файл инициализации bash, полученный из входа в оболочку, например, /etc/profile
. (Предполагается, что вы хотите, чтобы она была получена из интерактивных оболочек, а не из оконных оболочек).
Однако я не совсем понимаю контекст. Если бы вы могли дать более подробную информацию о том, что вы пытаетесь сделать, вы получите лучшие ответы.
Вы можете использовать export
чтобы пометить переменную, которая будет передана дочерним процессам в среде.
export linux_test_run=yes
Если вы хотите, чтобы переменная была доступна для вновь подключенных пользователей, вам нужно будет отредактировать файлы инициализации оболочки.
Извините, вам придется где-то редактировать файл запуска, и если вы хотите его для всех пользователей, возможно, bashrc
в /etc
Однако, если единственная причина, по которой вы не хотите использовать файлы, – это то, что вы хотите, чтобы это поведение исчезло при перезагрузке, есть и другие способы сделать это:
- Вызовите файл
setvariable.bash
изbashrc
. Внутри этого файла вы экспортируете переменную - Поместите файл в
/etc/init.d
который будет запущен при перезагрузке и дезактивирует файлsetvariable.bash
(заменяя его пустым файлом или чем-то еще)
Это взломать, но это может сработать.
Большинство методов регистрации читают переменные среды из /etc/profile
. (Могут быть другие возможности, но это проще всего действовать.) Итак, если я правильно вас понимаю, вы хотите добавить назначение переменной среды в /etc/profile
при следующей перезагрузке и удалить ее при перезагрузке после что.
Во-первых, если у вас этого нет (некоторые дистрибутивы настроили его), создайте каталог /etc/profile.d
и добавьте этот фрагмент в /etc/profile
:
for x in /etc/profile.d/*.sh; do . "$x" done unset x
Создайте файл, содержащий export linux_test_run=yes
называется /etc/profile.d/test_run.sh.0
.
Добавьте следующий фрагмент в /etc/rc.local
(или какой-либо другой скрипт, который выполняется во время загрузки):
for x in /etc/profile.d/*.sh.[0-9]*; do n=${x##*.} # extract the part after the last . case n in *[!0-9]*) continue;; # n is not a number, so skip this file *[1-9]*) mv "$x" "${x%.*}.$(($n-1))";; # decrement the number in the file name *) # the file is *.sh.0, so rename to .sh and schedule for deletion echo "${x%.*}" >>/etc/profile.d/cancel-on-reboot.list mv "$x" "${x%.*}";; esac done if [ -e /etc/profile.d/cancel-on-reboot.list ]; then # rename all files in this list so they won't be considered any longer while read -rx; do mv "$x" "$x.cancelled" done </etc/profile.d/cancel-on-reboot.list rm /etc/profile.d/cancel-on-reboot.list fi
Если вы хотите повторно установить параметр для одной перезагрузки, переименуйте его в *.sh.0
.