.bashrc代码在第一次登录时每天执行1次
问题描述:
有没有办法在我的.bashrc文件中创建一段特定的代码,只能在每周特定日期的第一次登录时执行?我已经知道使用命令替换 “$(date +%u)”会给我一个1-7的数字,对应于一周中的每一天(1表示星期一)。但是,我不希望此代码在每一次后续登录时都执行一整天。任何提示将不胜感激。提前致谢!.bashrc代码在第一次登录时每天执行1次
答
您不应该将任何内容写入磁盘。
我会提取一天的命令: 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
答
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" ;
}
我宁愿碰时间戳之前运行德的命令,因为它通常是安全的不超过反复运行它运行在所有东西。 (分区可能已被重新安装为只读,磁盘可能已满,权限可能已被更改...)
答
您还可以使用所谓的“信号文件”,这样的事情:
if [[ ! -e /tmp/$(date +%u).sem ]]
then
touch /tmp/$(date +%u).sem
# Do your one-time stuff
fi
然而,接近你选择,我会建议您使用完整日期(日期+“%Y%m%d”)以避免潜在的错误,如果用户在星期一登录,并且他的下一次登录在下个星期一。
[用户anacron](http://osmanov-dev-notes.blogspot.nl/2010/12/anacron-for-user.html)似乎是做你想做的事情,而且多才多艺,可以做更多事情。当然,如果你只需要这一点,锁定,检查和写入日期到某个文件是一种更轻量级的方法。 – Wrikken 2013-04-22 21:44:22