env $(cat .env) jq -n '$ENV | with_entries(select(.key | index("APP_") == 0))'
Приведенная выше команда запускает jq
в среде, измененной в соответствии с файлом .env
, а затем выбирает подмножество среды, в которой имена переменных начинаются с APP_
.
Руководство jq есть объяснение относительно функций $ENV
, with_entries
, select
и index
, которые я использовал.
https://stedolan.github.io/jq/manual/
Решение меньшего размера:
env -i $(cat .env) $(which jq) -n '$ENV'
Команда env -i
запускает jq
в среде, которая в остальном пуста, за исключением значений в .env
. jq
тогда сбрасывает только среду. Этот метод снимает ограничения на запуск префиксов тем или иным образом.
$(which jq)
помещает в команду абсолютный путь к jq
двоичному файлу, что необходимо, поскольку нет переменной среды PATH
, в которой он может искать для программ. Помните, что env -i
начинается с пустой среды.
Здесь выполнение jq
не требует ввода текста. Поэтому я использовал jq -n
, что предполагает ввод null
.