Seu problema não é com a função shell (), mas
a) com a maneira como você tenta interpolar expressões / variáveis - você deve usar [tmp]
em vez de $tmp
b) com o fato de que remind
não permite MSG
em expressões:
$ cat /tmp/foo.rem
SET var "REM Sep 13 2018 MSG test"
[var]
$ remind /tmp/foo.rem
/tmp/foo.rem(2): Can't nest MSG, MSF, RUN, etc. in expression
No reminders.
Isto é o que a documentação diz:
o You cannot use expression-pasting to determine the type (MSG, CAL, etc.) of a REM command. You can paste expressions before and after the MSG, etc keywords, but cannot do something like this: REM ["12 Nov 1993 AT 13:05 " + "MSG" + " BOO!"]
Eu não sou um usuário lembrete, mas esta é minha primeira tentativa de corrigir seu problema:
SET tmp shell("cat /tmp/test.rem", -1)
REM [substr(tmp, 4, index(tmp, "MSG")-1)] MSG [substr(tmp, index(tmp, "MSG")+4)]
desde que /tmp/test.rem
esteja no formato REM ... MSG ...
.
Por favor, observe que, lembrando, os índices começam em 1, não em 0.
Nota
Se o seu problema é, na verdade, 'como incluir conteúdo gerado dinamicamente em um arquivo de lembrete', você pode fazer isso redirecionando a saída do comando shell para um arquivo temporário e INCLUINDO esse arquivo:
INCLUDE [shell("echo REM " + today() + " MSG hello > /tmp/foo.rem; echo /tmp/foo.rem")]
Ou você pode usar o comando INCLUDE
com um fifo em vez de um arquivo normal e ter um script que escreve para o fifo toda vez que for aberto.
Antes de iniciar o reminder
:
$ mkfifo /tmp/remind-fifo
$ while echo 'REM Sep 18 2018 MSG test' > /tmp/remind-fifo; do sleep 1; done &
Substitua o echo
pelo script necessário para gerar os comandos de lembrete (por exemplo, sh my_script > /tmp/remind-fifo
).
Em seguida, no arquivo de lembrete, você pode simplesmente incluir o fifo:
INCLUDE /tmp/remind-fifo
A abordagem fifo pode ser usada com outros programas que tenham um mecanismo de inclusão (por exemplo, o pré-processador C
)