有没有办法为 x 小时设置环境变量
Is there a way to set environment variable for x hours
正在尝试创建一个将在设定时间后过期的环境变量。
用例:
我在终端上登录服务,我想保存例如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 小时后,我希望它执行以下操作之一:
- 取消设置
ACC_ID
作为环境变量
- 将
ACC_ID
设置为空字符串
我可以设置一个计划任务来执行此操作,但我想知道是否有更合适的或内置的方式。
fish 有一个内置的 event-oriented 系统。您可以编写一个在事件发生时触发的触发器。一个这样的事件是当进程退出时。所以:
- 在您的函数中,创建一个休眠 1 小时的后台进程
- 添加一个在后台进程结束时执行的函数
- 该函数将取消设置环境变量:
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 号退出的任何时候触发,所以我们不希望它徘徊等待 任何 具有该 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'
正在尝试创建一个将在设定时间后过期的环境变量。
用例:
我在终端上登录服务,我想保存例如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 小时后,我希望它执行以下操作之一:
- 取消设置
ACC_ID
作为环境变量 - 将
ACC_ID
设置为空字符串
我可以设置一个计划任务来执行此操作,但我想知道是否有更合适的或内置的方式。
fish 有一个内置的 event-oriented 系统。您可以编写一个在事件发生时触发的触发器。一个这样的事件是当进程退出时。所以:
- 在您的函数中,创建一个休眠 1 小时的后台进程
- 添加一个在后台进程结束时执行的函数
- 该函数将取消设置环境变量:
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 号退出的任何时候触发,所以我们不希望它徘徊等待 任何 具有该 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'