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

时间:2014-01-22 23:46:40

标签: linux environment-variables zsh

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

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

但该值在创建时固定:

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

谢谢。

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

无法在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

答案 2 :(得分:0)

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

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