Использовать env с переменными окружения из файла

Допустим, у меня есть файл (называемый e ) с этим контентом:

 а = 3
 b = "5 6"

Как я могу заставить каждого интерпретироваться как отдельный аргумент env ? То есть, чтобы он был эквивалентен:

 $ env a = 3 b = "5 6" ruby ​​-e 'p ENV ["a"];  p ENV ["b"] '
 "3"
 "5 6"
 $ env a = 3 "b = 5 6" ruby ​​-e 'p ENV ["a"];  p ENV ["b"] '
 "3"
 "5 6"

Очевидно, что это не работает из-за пространства:

 env $(cat e) ruby -e 'p ENV["a"]; p ENV["b"]' 

Но и это не так:

 IFS=$'\n' env $(cat e) ruby -e 'p ENV["a"]; p ENV["b"]' 

И при цитировании $(cat e) будет:

 "1 \ nb = 2 3"
 ноль

2 Solutions collect form web for “Использовать env с переменными окружения из файла”

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

Конечно . aka source command также не является подходящим инструментом для этой работы.

  1. Это позволяет файлу неожиданно содержать команды оболочки, отличные от простых назначений переменных, которые в определенных обстоятельствах (в зависимости от того, что представляет собой файл конфигурации) могут быть массивным дыром в безопасности.
  2. Ряд заданий, как в примере в вопросе, полученном . , устанавливает переменные оболочки , а не переменные среды . Они не экспортируются автоматически.

Правильные инструменты – это обычные инструменты для загрузки по цепочке из нескольких инструментов таких инструментов.

Один из них – read-conf из набора инструментов nosh , предназначенный для чтения именно такого конфигурационного файла (например, /etc/rc.conf из – например, PC-BSD ) и установки переменных среды без реализации и открытия файлов данных конфигурации синтаксис всего синтаксиса:

  jdebp% uname
 Linux
 jdebp% cat e
 а = 3
 b = "5 6"
 jdebp% read-conf e printenv |  хвост -n 3
 USER = jdebp
 а = 3
 b = 5 6
 jdebp% 
  jdebp% uname
 FreeBSD
 jdebp% read-conf /etc/rc.conf printenv |  head -n 2
 cron_enable = НЕТ
 sendmail_msp_queue_enable = НЕТ
 jdebp% 

Другим таким инструментом является runenv Уэйн Маршалл из perp.

Тебе даже не нужно env сюда. В любой Bourne-подобной оболочке (предполагая, что файл находится в синтаксисе sh как в вашем примере):

 (set -a; . ./e && ruby -e 'p ENV["a"]; p ENV["b"]') 

( set -a заставляет все будущие назначения переменных экспортироваться в среду).

Вы также можете сделать:

 cat e - << 'EOF' | paste -sd ' ' - | sh ruby -e 'p ENV["a"]; p ENV["b"]' EOF 

Это объединение всех строк в файле e и командной строки ruby ​​для построения длинной командной строки для интерпретации sh (при этом предполагается, что e файл находится в синтаксисе sh как предлагают эти двойные кавычки). Это предполагает, что присвоения являются отдельной строкой.

  • / usr / bin / env как shebang - и его последствия для безопасности
  • Как печатать переменные и значения оболочки для их копирования и вставки?
  • Почему echo $ SHELL всегда показывает / bin / bash?
  • Выдать ошибку при использовании пустых переменных оболочки
  • Что такое переменная среды?
  • получить переменную окружения по имени переменной?
  • Как определить, откуда появилась переменная среды
  • В чем разница между env, setenv, export и когда использовать?
  • Почему установка переменной перед командой legal в bash?
  • Можно ли изменить оболочку, используемую для запуска приложений GUI из диспетчера рабочего стола?
  • Msgstr "недействительный идентификатор", когда я делаю "экспорт $ PATH"
  • Interesting Posts

    Как разрешить прямой доступ root через SSH в определенном диапазоне IP?

    Почему мой ноутбук приостанавливается дважды / трижды?

    файловая система только для чтения

    Запуск исполняемого файла с помощью скрипта оболочки

    свободная команда, отображающая всю физическую память, или какая-то RAM зарезервирована и скрыта?

    Каково максимально допустимое количество TTY, определяется ли оно где-либо в заголовках ядра?

    Предупреждения о сценарии Ksh

    Можно ли сопоставить несколько конкретных номеров строк (не диапазон) с sed?

    Выполнять команды bash над SSH во время пребывания в интерактивном режиме

    Как перестроить glibc на Arch Linux?

    Проверьте, равна ли переменная открытой круглой скобке

    Выход systemctl усечен

    Использование Metasploit с модемом 3G USB

    Почему «никто» не называется «самым привилегированным пользователем после root»?

    Добавьте что-нибудь в конце каждой набранной команды

    Linux и Unix - лучшая ОС в мире.