Как использовать команду expandos в команде backtick shell

В моем .muttrc меня есть attribution предназначенная для эмуляции сообщения в стиле Outlook, которое выглядит следующим образом:

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

Тем не менее, %t expando оценивает значение «To Persons_Name» без двоеточия после «To», поэтому я хотел бы запустить его через команду оболочки, чтобы добавить двоеточие. Я могу использовать backticks для запуска команды оболочки, но я не могу понять, как получить значение %t expando в команде оболочки. Я пробовал это, но он не работает:

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

  • Непрерывное использование mutt
  • Сообщения Mutt Outlook искажены
  • В потоке писем, как ответить последнему отправителю, а не вам?
  • Как связать <Control> <Arrowkey> в Mutt?
  • Mutt: сохранение черновика с приложением
  • Поиск в mutt по дате и времени
  • В mutt невозможно привязать `limit` в пейджере к ключу, но` next-line` связывает штраф; в чем проблема?
  • Почему я получаю «Нет виртуальной папки, прерывая», когда пытаюсь помечать сообщения в Mutt?
  • One Solution collect form web for “Как использовать команду expandos в команде backtick shell”

    Команды оболочки выполняются при чтении настроек конфигурации, а не каждый раз, когда вы отвечаете. Вы можете видеть, что, введя

      set attribution="Date: `date`" 

    Это никогда не меняется. И, разумеется, в этот момент расширения не расширяются.

    Есть способ: если вы закончите строку с | , mutt предполагает, что это команда, и просто выполняет ее и использует свой вывод (в документации говорится, что она передает аргументы через первое слово, но это ложь).

    Проблема в том, что нет никакой команды unix (которая я знаю), которая применяет регулярное выражение к его аргументам и выводит результат. sed , например, работает только с файлами или stdin.

    Вы должны сами создать эту команду. В Perl это было бы примерно так:

     #!/usr/bin/perl my $regexp = shift; my @out; for (@ARGV) { eval $regexp; push @out, $_; } print join " ", @out; 

    Предположим, вы положили это на свой путь и r.pl его r.pl (не забудьте chmod-x it), тогда вы можете установить свою атрибуцию таким образом:

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

    Взгляните на man perlre чтобы узнать, почему вам нужно закончить регулярное выражение с помощью /m .

    НТН.

    Linux и Unix - лучшая ОС в мире.