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