有一个显示当前日期 zsh 的环境变量



有没有办法创建一个环境变量,每次显示当前日期时都显示当前日期?我试过了

CURRDATE="`date "+%H:%M:%S"`"

但该值在创建时是固定的:

>echo $CURRDATE
23:41:46
>echo $CURRDATE
23:41:46
>echo $CURRDATE
23:41:46

谢谢。

SECONDS接近你想要的。您可以将其值设置为当前时间,当前 shell 将继续递增其值。

% SECONDS=$(date +%s)
% echo $SECONDS
1390597152
% echo $SECONDS
1390597153
% echo $SECONDS
1390597154

如果你想要一个具有自定义名称的变量,你必须安排在其中一个钩子函数中更新它。

precmd () {
CURRDATE=$(date +%s)
}

没有办法在 zsh 中单独创建一个行为方式的变量。除非从外部设置,否则变量的值不会更改。

CURRDATE必须定期或至少在需要之前每次都设置为正确的时间。

幸运的是,zsh可以帮助解决这个问题。将此添加到您的.zshrc

export CURRDATE
currdate() {
CURRDATE=$(date "+%H:%M:%S")
}
add-zsh-hook preexec currdate

这会向环境添加CURRDATE,并且每次在运行命令行之前都会更新它。

% echo $CURRDATE
12:34:56
% echo $CURRDATE
12:34:57
% env | grep CURRDATE
CURRDATE=12:34:58

请注意,命令运行时不会更新CURRDATE,也就是说,您只能传递开始日期,而不能传递整个时钟。同样CURRDATE对于同一命令行上的所有命令都是相同的:

% echo $CURRDATE; sleep 10; echo $CURRDATE
12:34:56
12:34:56

您是否正在寻找解决方案:

echo $(date "+%H:%M:%S")

最新更新