![如何在反引号 shell 命令中使用 Expandos](https://linux22.com/image/20245/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%8F%8D%E5%BC%95%E5%8F%B7%20shell%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E4%BD%BF%E7%94%A8%20Expandos.png)
在我的文章中.muttrc
,我attribution
设置了模拟 Outlook 风格的消息引用,如下所示:
set attribution="\n\n-----Original Message-----\nFrom: %f\nSent: %d\n%t\nSubject: %s\n"
但是,%t
expando 的计算结果为“To Persons_Name”,“To”后没有冒号,因此我想通过 shell 命令运行它以添加冒号。我可以使用反引号来运行 shell 命令,但我不知道如何获取%t
shell 命令中的 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。