O remember(1) fornece uma função shell()
documentada da seguinte forma:
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.
…
Eu gostaria que qualquer coisa s_cmd
que escrevesse no stdout fosse interpretada pelo próprio lembrete . Por exemplo.:
$ echo REM Sep 13 2018 MSG test >/tmp/test.rem
$ tail -2 ~/.reminders
SET tmp shell("cat /tmp/test.rem", -1)
$tmp
Onde $tmp
está minha tentativa malsucedida de inserir a saída do comando na linha acima. Ao executar rem(1)
, não retorna erro, mas também não interpola $tmp
:
$ rem
Reminders for Thursday, 13th September, 2018 (today):
…
$tmp
Presumo que isso $tmp
seja interpretado como uma REM …
declaração implícita.
(A INCLUDE
diretiva não funciona neste contexto porque preciso que a saída da inclusão seja gerada in situ.)
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 permiteMSG
em expressões:É o que diz a documentação:
Não sou um usuário de lembrete, mas esta é minha primeira tentativa de corrigir seu problema:
desde que
/tmp/test.rem
seja da formaREM ... MSG ...
.Observe que, para lembrar, os índices começam em 1, não em 0.
Observação
Se o seu problema é realmente '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, em seguida, INCLUINDO esse arquivo:
Ou você pode usar o
INCLUDE
comando com um fifo em vez de um arquivo normal e ter um script que grava no fifo toda vez que ele é aberto.Antes de começar
reminder
:Substitua o
echo
por qualquer script que você precise para gerar os comandos de lembrete (por exemplo.sh my_script > /tmp/remind-fifo
).Então, no arquivo de lembrete, você pode simplesmente incluir o fifo:
A abordagem fifo pode ser usada com outros programas que possuem um mecanismo de inclusão (por exemplo, o pré-
C
processador)