如何在反引号 shell 命令中使用 Expandos

如何在反引号 shell 命令中使用 Expandos

在我的文章中.muttrc,我attribution设置了模拟 Outlook 风格的消息引用,如下所示:

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

但是,%texpando 的计算结果为“To Persons_Name”,“To”后没有冒号,因此我想通过 shell 命令运行它以添加冒号。我可以使用反引号来运行 shell 命令,但我不知道如何获取%tshell 命令中的 Expando 的值。我已经尝试过这个但它不起作用:

set attribution="\n\n-----Original Message-----\nFrom: %f\nSent: %d\n`echo %t | sed s/^To/To:/`\nSubject: %s\n"

答案1

shell 命令在读取配置设置时执行,而不是每次回复时执行。输入即可看到

 set attribution="Date: `date`"

它永远不会改变。当然,此时 Expandos 还没有扩展。

有一种方法:如果你以 a 结尾字符串|,mutt 会假设它是一个命令,然后执行它并使用它的输出(文档说它管道通过第一个词来论证,但那是一个谎言)。

问题是,没有任何 unix 命令(据我所知)可以将正则表达式应用于其参数并输出结果。sed例如,仅适用于文件或标准输入。

您必须自己创建该命令。在 Perl 中,它会是这样的:

#!/usr/bin/perl

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

print join " ", @out;

假设您将其放入路径中并为其命名r.pl(记住对其进行 chmod-x ),那么您可以这样设置属性:

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

查看一下man perlre以找出为什么需要以 结尾正则表达式/m

HTH。

相关内容