Я пытаюсь взять содержимое файла конфигурации (в формате JSON), вырезать лишние новые строки и пробелы для краткости, а затем назначить его переменной среды перед запуском моего приложения.
Этовот где я до сих пор:
pwr_config=`echo "console.log(JSON.stringify(JSON.parse(require('fs').readFileSync(process.argv[2], 'utf-8'))));" | node - config.json | xargs -0 printf '%q\n'` npm run start
Это направляет короткое приложение node.js во время выполнения узла, принимая аргумент имени файла, и анализирует и структурирует файл JSON для его проверки и удаления.любые ненужные пробелы.Пока все хорошо.
Результат этого затем передается в printf, или, по крайней мере, так будет, но printf не поддерживает ввод таким способом, по-видимому, поэтому я использую xargs для передачи его втаким образом, он поддерживает.
Я использую форматер% q для форматирования строки, экранирующей любые символы, которые могут быть проблемой в составе команды, но при вызове printf через xargs printf утверждает, что это не такt поддерживают% q.Я думаю, что это возможно, потому что существует более одной версии printf, но я не совсем уверен, как решить эту проблему.
Любая помощь будет признательна, даже если решение полностью отличается от того, что я начал :) Спасибо!
Обновление Вот вывод, который я получаю на MacOS:
$ cat config.json | xargs -0 printf %q
printf: illegal format character q
Мой файл JSON выглядит так:
{
"hue_host": "192.168.1.2",
"hue_username": "myUsername",
"port": 12000,
"player_group_config": [
{
"name": "Family Room",
"player_uuid": "ATVUID",
"hue_group": "3",
"on_events": ["media.play", "media.resume"],
"off_events": ["media.stop", "media.pause"]
},
{
"name": "Lounge",
"player_uuid": "STVUID",
"hue_group": "1",
"on_events": ["media.play", "media.resume"],
"off_events": ["media.stop", "media.pause"]
}
]
}