2

有没有办法让我的 .bashrc 文件中的特定代码仅在一周中特定日期的第一次登录时执行?我已经知道使用命令替换“$(date +%u)”会给我一个 1-7 的数字,对应于一周中的每一天(1 是星期一)。但是,我不希望此代码在每次后续登录时都执行一整天。任何提示将不胜感激。提前致谢!

4

3 回答 3

2

您不必将任何内容写入磁盘。

我会从命令中提取日期:lastlog -u $USER and date

然后进行适当的匹配/比较。

逻辑是这样的:

    从日期获取日期
    如果从日期开始的一天是神奇的一天,那么
      从 lastlog -u $USER 获取一天
      如果日期与今天不匹配,则
        运行你的命令
于 2013-04-22T23:16:25.203 回答
1

您还可以使用所谓的“信号量文件”,如下所示:

if [[ ! -e /tmp/$(date +%u).sem ]]
then
    touch /tmp/$(date +%u).sem
    # Do your one-time stuff
fi

但是,如果您选择哪种方法,我建议您使用完整日期(日期 +“%Y%m%d”)以避免如果用户在星期一登录,而他的下一次登录是在下星期一,则可能出现错误。

于 2013-04-23T14:04:49.167 回答
0
date +%u |                  ## Generate timestamp (could be a better date-spec)
   tee timestamp.tmp |      ## Save a copy for later usage
   cmp - timestamp ||       ## Fail if date-spec changed
   {  
      ## In that case, update timestamp
      mv timestamp.tmp timestamp && 

      ## And only if that succeeds, run your code
      echo "Once a day" ;
    }

我更喜欢在运行 de 命令之前触摸时间戳,因为通常不运行任何东西比重复运行它更安全。(分区可能已重新安装为只读,磁盘可能已满,权限可能已更改...)

于 2013-04-22T22:01:07.477 回答