Intereting Posts
Как получить PID на терминал в начале * каждого * процесса? Bash: разрешение отклонено при попытке эхо-передачи данных непосредственно в сеть Где я могу найти самый последний словарь стандартных полей событий аудита Linux? Извлечение записей фиксированной ширины без разделителя из одной строки btrfs error unknown – root fs не будет монтировать привязка ip-адреса к имени хоста Неизвестная команда «vftovp» в истории команд Linux virtualbox-5.0 не будет установлен на ubuntu-сервере 14.04.4 Мониторинг истории USB-накопителей Мониторинг автоматического обнаружения Ubuntu Запись на stdout, кроме перенаправления вывода C Является ли временной лимит зависеть от приоритета процесса или нет при полностью справедливом расписании? Как я могу автоматически закрыть сброшенные SSH-соединения? Как загрузить мой компьютер с Live-DVD с терминала? Как я могу убедиться, что Firefox не использует мою тему GTK в части без хрома?

Как назначить переменную из другой переменной в отдельном файле

У меня есть файл с кучей переменных, таких как:

файл

DEVICE0_USB="usbSerialNo1" DEVICE1_USB="usbSerialNo2" 

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

скрипт

 FAX_MACHINE_USB=$DEVICE0_USB COFFEE_MAKER_USB=$DEVICE1_USB 

так что когда я echo $FAX_MACHINE_USB я получаю usbSerialNo1

Я могу использовать source чтобы получить переменные из файла, но это также будет запускать каждую строку в файле . В моем случае это не проблема, поскольку файл имеет только объявления переменных, но я по-прежнему предпочитаю не делать этого. Есть ли другой способ его достижения?

Кажется, подобный вопрос был дан здесь .

Конечно, вы можете использовать . или source чтобы назначить переменные, если вам удобно, но вы также можете использовать awk или grep для запуска только определенных строк из файла, которые выглядят как переменные declerations.

Как обрабатывать многие переменные

Если вы хотите script1.sh все переменные, назначенные в script1.sh , рассмотрите:

 source <(grep -E '^\w+=' script1.sh) 

Это использует grep для извлечения всех строк из script1.sh которые выглядят как назначения переменных. Эти строки затем запускаются в текущей оболочке, назначая переменные.

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

Рассматривая фрагменты в свою очередь:

  • source file сообщает оболочке выполнить file в текущей оболочке.

  • <(...) называется подстановкой процесса. Это позволяет нам использовать вывод команды вместо имени файла.

  • Команда grep -E '^\w+=' script1.sh извлекает все строки, которые кажутся переменными назначениями. Если вы запустите эту команду самостоятельно в командной строке, вы увидите что-то вроде:

     variable="Hello" var2="Value2" 

    и так далее. Вы должны сделать это сначала и проверить вывод, чтобы убедиться, что это строки, которые вы хотите выполнить.