Есть ли способ установить переменную среды для х часов - PullRequest
2 голосов
/ 24 июня 2019

Попытка создать переменную среды, срок действия которой истечет через установленное количество времени.

Вариант использования :
Я вхожу в службу на терминале, я хочу сохранить, например. ACC_ID=123456 в переменные окружения, затем распечатайте это в терминальной подсказке:

(123456)-(name)$

Использование следующего метода fish для установки acc_id переменной среды:

function acc_id
    cd /path/to/script/
    ./login_to_service.sh $argv
    set -Ux ACC_ID $argv
    cd -
end

ACC_ID сохраняется, пока я не перезапущу функцию acc_id

Через 1 час я хочу выполнить одно из следующих действий:

  • unset ACC_ID как переменная env
  • установить ACC_ID в пустую строку

Я мог бы настроить запланированное задание, чтобы сделать это, но мне интересно, есть ли более подходящий или встроенный способ.

1 Ответ

2 голосов
/ 24 июня 2019

рыба имеет встроенную систему событий.Вы можете написать триггер, который срабатывает при возникновении события.Одним из таких событий является выход из процесса.Итак:

  • в вашей функции создайте фоновый процесс, который спит в течение 1 часа
  • , добавьте функцию, которая выполняется после завершения этого фонового процесса
  • , эта функция будет сброшенаenv var:
function acc_id
    cd /path/to/script/
    ./login_to_service.sh $argv
    set -Ux ACC_ID $argv
    cd -
    # the magic
    sleep 1h &
    function _unset_accid --on-process-exit (jobs --last --pid)
        set -e ACC_ID
        functions -e (status function)
    end
end

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

Вот демо:

$ function set_var_for_a_while
      set -gx MYENVVAR "variable value created "(date '+%s')
      sleep 5 &
      function _unset_my_var --on-process-exit (jobs --last --pid)
          set -e MYENVVAR
          functions -e (status function)
      end
  end

$ set_var_for_a_while; type _unset_my_var; for i in (seq 6); printf "%s\t%s\n" (date) $MYENVVAR; sleep 1; end; type _unset_my_var

Вывод:

_unset_my_var is a function with definition
function _unset_my_var --on-process-exit 68077
    set -e MYENVVAR
    functions -e (status function)
end
Mon Jun 24 10:21:51 EDT 2019    variable value created 1561386110
Mon Jun 24 10:21:52 EDT 2019    variable value created 1561386110
Mon Jun 24 10:21:53 EDT 2019    variable value created 1561386110
Mon Jun 24 10:21:54 EDT 2019    variable value created 1561386110
Mon Jun 24 10:21:55 EDT 2019    variable value created 1561386110
Mon Jun 24 10:21:56 EDT 2019
type: Could not find '_unset_my_var'
...