Анализировать файл конфигурации и передавать параметры другому сценарию

Вы можете получить его из / dev / vcs1 (для первой виртуальной консоли (tty1)).

cat /dev/vcs1

Но есть вероятность, что эти строки также есть в файле журнала. (для начала проверьте / var / log / messages , /var/log/kernel.log , / var / log / syslog ).

Вы также можете проверить stdout / stderr chrome , который, если вы запустили его с помощью диспетчера Windows, может перейти в какой-то файл, например ~ / .xsession-errors .

1
09.03.2019, 11:29
2 ответа

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

$ cat vars.txt
variable1 = 25
variable2 = 36

$ sed -i 's/ = /=/' vars.txt

$ cat vars.txt
variable1=25
variable2=36

Как только вы это сделаете, просто sourceфайл, чтобы установить все переменные, как вам нужно:

#!/bin/bash
source vars.txt
echo "Variable 1: $variable1, Variable 2: $variable2"

Что даст вам вывод:

Variable 1: 25, Variable 2: 36

Как отмечает roaima в комментариях, этот подход связан с проблемой безопасности. Когда вы sourceсоздаете свой файл, вы, по сути, запускаете его как сценарий оболочки. (Сравнение выполнения сценария и источника сценария объясняется здесь). Это означает, что вы должны доверять содержимому этого файла. Если злонамеренный пользователь или процесс сможет редактировать файл, вы можете выполнить произвольные команды.

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

0
27.01.2020, 23:30

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

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

Предполагая, что параметры конфигурации составляют один -на строку -, вы можете прочитать их с помощью кода, подобного этому

#!/bin/bash
#
declare -A config
while IFS=$'[ \t]*=[ \t]*' read -r name value
do
    echo "Read name=$name, value=$value" >&2
    config[$name]="$value"
done

И вы можете ссылаться на них, используя "${config[$name]}"ссылки, подобные этой

echo "variable1=${config[variable1]}, variable2=${config[variable2]}." >&2

Конструкция IFS=$'[ \t]*=[ \t]*'указывает глаголу readигнорировать пробелы вокруг символа =, так что fruit=pearи fruit = pearэквивалентны.

3
27.01.2020, 23:30

Теги

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