你能使用一个bash/sh脚本quine编写一个简单的每周提醒吗?

4
我需要设置一个提醒,以便参加每周会议。我们公司标准的提醒工具存在问题,当在Wine下运行时,它会弹出在虚拟桌面外的位置。
我想尝试创建一个“at”命令,以便弹出一个提醒窗口,并在之后的一周重新提交自己,这很有趣。
我知道可以使用cron或某个闹钟应用程序,但这激起了我的好奇心。
单次执行版本如下:
echo "DISPLAY=$DISPLAY zenity --title='Weekly Meeting' --text='Time for the weekly meeting' --info" | at 0955 NEXT Monday

有人能否设计一个类似quine的命令,每次运行时,它将在接下来的一周内以重复循环的方式再次提交相同的命令?


@Veedrac,像“有趣”这样的标签有很多作用,比如排除过滤器。如果打上这样的标签,那些不想看没有实际价值的东西的人就可以不看它们。 - Charles Duffy
@CharlesDuffy 这方面有元帖吗?我认为元标签是不需要的。例如,http://blog.stackoverflow.com/2010/08/the-death-of-meta-tags/。 - Veedrac
可能是这样,我得看一下。作为一个将许多元标记添加到其“忽略”列表中的人,我对它们的消失感到失望。 - Charles Duffy
@Veedrac:我重新添加“fun”标签的原因是因为我在下面的一条旧评论中引用了它。看起来它曾经存在过,但被删除了。重点是,我不想知道如何设置自己的每周重复提醒,而是只是为了“好玩”,想知道如何使用类似quine的at命令实现这一点。 - Adrian Pronk
@AdrianPronk,我认为你对标签发表评论并不是一个非常有说服力的理由,特别是像这样的元标签是明确禁止的。 - Veedrac
4个回答

1

试一试这个:

export reminder='"DISPLAY=$DISPLAY zenity --title='\''Weekly Meeting'\'' --text='\''Time for the weekly meeting'\'' --info" | at 0955 NEXT Monday'; echo $reminder | at 0955 NEXT Monday

将两个at命令都改为at now + 1 minute以进行测试。当输入命令时,$DISPLAY将被设置,但在作业执行时可能不正确,但这与您问题中的命令行为相同。


这不行:它执行的下一个星期一是另一个“at”命令,用于运行zenity在接下来的星期一。 - Adrian Pronk
哎呀,我忘记删掉一个额外的 echo 了。请尝试编辑后的版本。 - Dennis Williamson

0

我可能在作弊,但你可以利用这个事实:at 保留了大多数环境变量的值(不包括 $DISPLAY,似乎也不包括 $DISP):

export FOO=$DISPLAY CMD='DISPLAY=$FOO xmessage "hi there";
echo "$CMD" | at now + 1 minutes'
eval "$CMD"

我使用了xmessage和一分钟,因为它们很方便,但当然你可以根据自己的需求进行调整。


它运行两次。但它不会重新安排自己的计划。 - Dennis Williamson
我猜你的 at 和我的不同。在 echo 前面添加 export FOO CMD; 是否可以解决问题? - Jérémie Koenig

0

尝试使用文件:

$ cat /tmp/quine_file
DISPLAY=:0.0 zenity --title='Weekly Meeting' --text='Time for the weekly meeting' --info;
at '0955 NEXT monday' </tmp/quine_file;

$ at '0955 NEXT monday' </tmp/quine_file

这样,每次运行作业时,都会安排下一个周一的作业。


这就是我最后做的。但我仍然希望尝试找到一种不使用这样的文件的解决方案。 - Adrian Pronk

0

抱歉打破好玩的氛围,但是……使用某种形式的cron job(定时任务)会更有意义吧?


-1:你看到“fun”标签了吗?我知道如何使用cron job,所以我不需要在SO上询问。我不知道的是如何制作类似quine的shell脚本。因此提出这个问题。 - Adrian Pronk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接