Переопределить имя хоста для почты(1) в сценарии оболочки

perl -lane '
   @ARGV and $h{$F[0]}=$F[1],next;
   print join $", map { $_, $h{$_} // "NA" } @F;
' File2 File1

Результаты

GeneA Ensembl1 GeneB Ensembl2
GeneA Ensembl1 GeneD NA
GeneC Ensembl3 GeneB Ensembl2

Работа

  • Сначала укажите File2, затем File1 в списке аргументов для Perl.
  • Создайте хэш %hс ключами GeneA, GeneB и т. д. => значения представляют собой ансамбли из File2. Обратите внимание, что при обработке File2 @ARGV имеет один элемент, поэтому @ARGV в скалярном контексте возвращает значение true.
  • Во время чтения -файла File1 значение @ARGV уменьшается до нуля, поэтому первая строка не оценивается. Во второй строке будут напечатаны поля после соответствующего преобразования сопоставления и объединены пробелами ($" по умолчанию равно пробелу ).
1
01.08.2019, 23:27
1 ответ

ports/mail/mutt раствор:

Это связано с тем, что muttне изменяет конверт SMTP в соответствии с переменной среды EMAIL, поэтому вместо этого необходимо использовать следующее: tcsh синтаксис:

env EMAIL=`whoami`@`hostname`.example.org \
mutt -s "`history 1`" -e 'set envelope_from' email@example.org

По сути, вы должны не только указать свой адрес электронной почты в переменной окружения EMAIL, но также передать -e 'set envelope_from'в mutt, что по умолчанию равно no, согласноhttp://www.mutt.org/doc/manual/#use-envelope-from.


mail(1)раствор:

Другим вариантом является использование фактаmail(1)команды , позволяющей передать любуюsendmail-flagsпрошедшуюспецификациюto-addr:

 mail [-EIinv] [-a file] [-b bcc-addr] [-c cc-addr] [-r rcfile]
      [-s subject] to-addr... [- sendmail-flags]

Похоже, что это явно задокументировано с примером -fтолько на странице руководства NetBSD для почты (1 ), а не в OpenBSD , FreeBSD . ], OS X или macOS:

   Sending mail
     To send a message to one or more people, mail can be invoked with argu-
     ments which are the names of people to whom the mail will be sent.  You
     are then expected to type in your message, followed by a `control-D' at
     the beginning of a line.

     Any flags following the list of recipients, will be passed, together with
     their arguments, directly to sendmail(1).  For example to change your
     From address to somebody@somewhere.net you can specify:

           mail recipient -f somebody@somewhere.net

Например, следующее будет работать так же, как muttпример выше; успешно протестировано на OS X:

mail -s "`history 1`" email@example.org -f `whoami`@`hostname`.example.org

N. B. Порядок имеет значение; иmail -f wrong@example.org -s subject email@example.orgне будет работать; подробности смотрите выше!

1
27.01.2020, 23:41

Теги

Похожие вопросы