Intereting Posts
Как применить новые настройки беспроводной сети на маршрутизаторе OpenWRT без перезагрузки? курсор и объединение диакритики в оболочке Почему эта бомба вилка-раковины не работает на моей RHEL VM? Как полностью переопределить макет i3wm по умолчанию с append_layout? Простое сравнение на основе флагов в Linux Как убить процесс в терминале внутри emacs Linux. Проверьте параметры make-файла, с помощью которых создается текущее ядро. Потеря связи ssh Как я могу прочитать дескриптор «Характеристическое описание пользователя»? Удалить многострочный текст со специальными символами из всех файлов в папке xfce каждое окно на панели мониторов Как этот кронаб интерпретирует «* / N * * * *», где N находится между 31 и 59? Как найти только исполняемые файлы, используя «locate»? Проблемы с компиляцией драйверов RealTek Wifi rtl8192ce на Fedora 21 В чем разница между && и | в сценарии bash?

глобальная Linux-оболочка linux в переменной памяти – из оболочки

Есть ли способ установить переменную env без редактирования файлов, которые будут находиться в памяти, а также повлиять на другие оболочки, которые вступят в силу для любого нового пользователя, который подключает этот компьютер и вступит в силу только после следующей перезагрузки Linux-машины?

Я пытаюсь вспомнить что-то в своем linux, которое будет эффективным (из сценария) только на время, когда машина вверх (я не хочу файл по этой причине), поэтому из моей оболочки я хочу установить некоторый флаг, который будет действительным для любого пользователя, подключающегося как:

linux_test_run=yes 

однако я хочу, чтобы он был эффективным для любой новой оболочки, открытой на этом Linux. и я хочу, чтобы в следующий раз кто-то перезагрузит эту машину, эта переменная исчезнет …

Любой (простой) для меня, чтобы достичь этого? (без использования файлов …)

Ну, файлы в /tmp обычно очищаются при перезагрузке, поэтому почему бы нет источника какого-либо скрипта там файла, что-то вроде строк «если этот файл существует, его источник»? Затем вы можете сделать свою инициализацию в этом файле по мере необходимости. Это может быть помещено в некоторый файл инициализации bash, полученный из входа в оболочку, например, /etc/profile . (Предполагается, что вы хотите, чтобы она была получена из интерактивных оболочек, а не из оконных оболочек).

Однако я не совсем понимаю контекст. Если бы вы могли дать более подробную информацию о том, что вы пытаетесь сделать, вы получите лучшие ответы.

Вы можете использовать export чтобы пометить переменную, которая будет передана дочерним процессам в среде.

 export linux_test_run=yes 

Если вы хотите, чтобы переменная была доступна для вновь подключенных пользователей, вам нужно будет отредактировать файлы инициализации оболочки.

Извините, вам придется где-то редактировать файл запуска, и если вы хотите его для всех пользователей, возможно, bashrc в /etc

Однако, если единственная причина, по которой вы не хотите использовать файлы, – это то, что вы хотите, чтобы это поведение исчезло при перезагрузке, есть и другие способы сделать это:

  1. Вызовите файл setvariable.bash из bashrc . Внутри этого файла вы экспортируете переменную
  2. Поместите файл в /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 .