2013-04-22 170 views
2

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

+0

[用户anacron](http://osmanov-dev-notes.blogspot.nl/2010/12/anacron-for-user.html)似乎是做你想做的事情,而且多才多艺,可以做更多事情。当然,如果你只需要这一点,锁定,检查和写入日期到某个文件是一种更轻量级的方法。 – Wrikken 2013-04-22 21:44:22

回答

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 
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" ; 
    } 

我宁愿碰时间戳之前运行德的命令,因为它通常是安全的不超过反复运行它运行在所有东西。 (分区可能已被重新安装为只读,磁盘可能已满,权限可能已被更改...)

1

您还可以使用所谓的“信号文件”,这样的事情:

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

然而,接近你选择,我会建议您使用完整日期(日期+“%Y%m%d”)以避免潜在的错误,如果用户在星期一登录,并且他的下一次登录在下个星期一。

相关问题