有没有办法让我的.bashrc文件中的特定代码段只能在一周中特定日期的第一次登录时执行?我已经知道使用命令替换 “$(date +%u)”会给我一个1-7的数字,对应于一周中的每一天(1表示星期一)。但是,我不希望此代码在每次后续登录时全天执行。任何提示将非常感激。提前谢谢!
答案 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命令之前触摸时间戳,因为通常不运行任何东西比重复运行它更安全。 (该分区可能已重新装入只读,磁盘可能已满,权限可能已更改...)