.bashrc代码首次登录时每天执行1次

时间:2013-04-22 21:38:16

标签: linux bash

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

3 个答案:

答案 0 :(得分:2)

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

我会从命令中抽出一天: lastlog -u $ USER 和 日期

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

逻辑如下:

    get day from date
    if day from date is the magic day, then
      get day from from lastlog -u $USER
      if day does not match today's day then
        run your command

答案 1 :(得分:1)

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

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

但是,您选择哪种方法,我建议您使用完整日期(日期+“%Y%m%d”),以避免在用户星期一登录时出现潜在错误,并且下一次登录是在下一次登录星期一。

答案 2 :(得分: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命令之前触摸时间戳,因为通常不运行任何东西比重复运行它更安全。 (该分区可能已重新装入只读,磁盘可能已满,权限可能已更改...)