Como usar o comando expandos no shell backtick

3

No meu .muttrc , tenho attribution definido para emular as citações de mensagens no estilo do Outlook da seguinte forma:

set attribution="\n\n-----Original Message-----\nFrom: %f\nSent: %d\n%t\nSubject: %s\n"

No entanto, o %t expando é avaliado como "To Persons_Name" sem dois-pontos depois de "To", portanto, gostaria de executá-lo por meio de um comando shell para adicionar os dois pontos. Eu posso usar backticks para executar um comando shell, mas não consigo descobrir como obter o valor do %t expando no comando shell. Eu tentei isso, mas não funciona:

set attribution="\n\n-----Original Message-----\nFrom: %f\nSent: %d\n'echo %t | sed s/^To/To:/'\nSubject: %s\n"
    
por Ben Williams 05.01.2012 / 16:23

1 resposta

3

Os comandos do shell são executados quando a configuração é lida, não toda vez que você responde. Você pode ver isso digitando

 set attribution="Date: 'date'"

Isso nunca muda. E, claro, os expandos não são expandidos naquele momento.

Existe uma maneira: se você terminar a string com um | , o mutt assume que é um comando e apenas o executa e usa sua saída (a documentação diz que canaliza os argumentos através do primeiro palavra, mas isso é uma mentira).

O problema é que não há nenhum comando unix (que eu saiba) que aplique um regex em seus argumentos e produza o resultado. sed , por exemplo, só funciona em arquivos ou stdin.

Você precisa criar esse comando você mesmo. Em Perl, seria algo assim:

#!/usr/bin/perl

my $regexp = shift;
my @out;
for (@ARGV) {
  eval $regexp;
  push @out, $_;
}

print join " ", @out;

Digamos que você coloque isso no seu caminho e nomeie-o como r.pl (lembre-se de chmod-x), então você pode definir sua atribuição desta maneira:

set attribution="r.pl 's/^To /To: /m' 'From: %n\n%t\netc...\n'|"

Dê uma olhada no man perlre para descobrir por que você precisa encerrar o regexp com /m .

HTH.

    
por 05.01.2012 / 23:06

Tags