2016-09-21 2 views
1

Я пытаюсь написать perl-скрипт, который отправляет письма всем, что я им даю в первом аргументе, но мне нужно, чтобы тело электронной почты имело несколько строк. Когда я передаю текст сценарию (используя MIME :: Lite, fyi), тело письма имеет только одну строку, потому что «\ n», который я передаю в скрипте, похоже, не преобразуется в новую строку в элементе электронной почты.Аргумент Perl, содержащий символ новой строки

Вот пример

Script Краткое содержание:

my $message = $ARGV[0]; 
    #blah blah 
    sendEmail $message; 

Пример команды при вызове скрипта

sendEmail.pl "Issue: CPU usage is high \n Time: 11:20AM \n" 

Что мне нужно:

Issue: CPU issue 
Time: 12:00AM 

Что я получаю:

Issue: CPU issue \n Time: 12:00AM \n 

Даже если я просто хочу, чтобы напечатать к выводу, что строка, как в print "$message", я получаю тот же результат.

Как заставить Perl учитывать \ n символов, которые передаются ему, чтобы он перемещал содержимое в следующую строку, когда он видит этот символ?

+0

Это на самом деле _new line_. A_carriage return_ является '\ r'. :) – simbabque

ответ

5

Это не похоже на проблему с perl, это проблема с командой bash, которую вы набрали. При входе в следующую строку буквальной в bash:

"Issue: CPU usage is high \n Time: 11:20AM \n" 

bash не интерпретирует последовательность \n характера, как разрывы строк. Для этого вам нужен другой синтаксис. Вы можете использовать одно из следующих действий:

# bash 
sendEmail.pl $'Issue: CPU usage is high\nTime: 11:20AM\n' 

или

# bash or sh 
sendEmail.pl 'Issue: CPU usage is high 
Time: 11:20AM 
' 
+0

Вы правы. Спасибо man – JohnnyLoo

+2

Я бы назвал это «проблемой с тем, как вы используете bash», а не «проблемой с bash». Бэш ведет себя точно так, как указано и документировано. –

+0

@CharlesDuffy Хорошая точка. – redneb

Смежные вопросы