Просто отображать переменные env, но не функции bash

Каталог /var/spool/cronсодержит пользовательские личные crontab. Эти данные сильно отличаются по своей природе от системных файлов конфигурации -в /etc. Разрешить etckeeperобрабатывать их было бы похоже на мониторинг всех личных .bashrcфайлов пользователя и отправку изменений в систему контроля версий, что кажется довольно навязчивым.

Все системные файлы crontab хранятся в /etc, поэтому по умолчанию они будут обрабатываться в etckeeper.

0
27.02.2020, 07:36
2 ответа

Так что я сделал это, используя подоболочку и отключив все функции bash:

   (
       # in subshell

       for line in `declare -F | awk '{print $3}'`; do
          unset -f "$line"  # unset all bash funcs
       done

        env
    )

но держу пари, есть способ получше

0
28.04.2021, 23:22

Чтобы перечислить все переменные среды, но не экспортированные функции:

for n in `compgen -e`; do echo "$n=${!n}"; done

Здесь compgen -eперечислены имена переменных; echoвыводит имена с их значениями. Возможно, вы хотите использовать ${!n@Q}вместо ${!n}, чтобы значения были указаны в кавычках, чтобы вывод можно было прочитать из файла или использовать с eval.

(Редактировать:)
ЗАМЕЧАНИЕ :это не очень хорошо работает, когда задействованы массивы; в отличие от env, который игнорирует массивы, это печатает значение с индексом 0для массивов. (Для ассоциативных массивов, если индекс 0отсутствует, печатается name=.)
Чтобы понять, как с этим справиться, см. ответы на этот вопрос о переполнении стека .

1
28.04.2021, 23:22

Теги

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