remind(1)提供了一个函数shell()
,记录如下:
shell(s_cmd [,i_maxlen])
Executes cmd as a system command, and returns the first 511
characters of output resulting from cmd. Any whitespace
character in the output is converted to a space. Note that if
RUN OFF has been executed, or the -r command-line option has
been used, shell() will result in an error, and cmd will not be
executed.
…
我希望任何s_cmd
写入 stdout 的东西都能被提醒自己解释。例如:
$ echo REM Sep 13 2018 MSG test >/tmp/test.rem
$ tail -2 ~/.reminders
SET tmp shell("cat /tmp/test.rem", -1)
$tmp
$tmp
我在上面的行中插入命令输出的不成功尝试在哪里。执行时rem(1)
,它不会返回错误,但也不会进行插值$tmp
:
$ rem
Reminders for Thursday, 13th September, 2018 (today):
…
$tmp
我假设这$tmp
被解释为一个隐含的REM …
陈述。
(该INCLUDE
指令在这种情况下不起作用,因为我需要就地生成包含的输出。)
您的问题不在于 shell() 函数,而是
a) 用你尝试插入表达式/变量的方式——你应该使用
[tmp]
而不是$tmp
b)表达式
remind
中不允许的事实:MSG
这就是文档所说的:
我不是提醒用户,但这是我解决您的问题的第一次尝试:
只要
/tmp/test.rem
是 的形式REM ... MSG ...
。请注意,提醒一下,索引是从 1 开始的,而不是从 0 开始的。
笔记
如果您的问题实际上是“如何在提醒文件中包含动态生成的内容”,您可以通过将 shell 命令的输出重定向到一个临时文件,然后包含该文件来实现:
或者您可以使用
INCLUDE
带有 fifo 而不是常规文件的命令,并有一个脚本在每次打开时写入 fifo。开始之前
reminder
:将 替换
echo
为生成提醒命令所需的任何脚本(例如sh my_script > /tmp/remind-fifo
)。然后,在提醒文件中,您可以简单地包含 fifo:
fifo 方法可以与其他具有包含机制的程序一起使用(例如
C
预处理器)