Символ новой строки правильно распознается на сервере server2 (Solaris), тогда как на сервере server1 (Linux) он воспринимается как символ обратной косой чертыn. Как это исправить?
Работая над простым скриптом, который принимает аргументы и отправляет письма, я впервые заметил это довольно странное поведение.
Синтаксис: $ ksh SEND_MAIL.sh <to> <Subject> <body>
Теперь, когда я запускаю этот скрипт на сервере-1
[kent@server1] $ ksh SEND_MAIL.sh [email protected] "Subject" "123\n456" [четверг, 10 января, 10:51:18 EST 2013] — Начинается отправка почты на адрес: [email protected], с тема \'>>>123\n456\'
Обратите внимание, что символ новой строки принимается как backlash-n.
В то время как на сервере-2 специальный символ
\nправильно заменяется на символ новой строки.[kent@server2] $ ksh SEND_MAIL.sh [email protected] "Subject" "123\n456" [четверг, 10 января, 10:51:18 EST 2013] — Начинается отправка почты на адрес: [email protected], с тема \'>>>123 456\'
Я думаю, что мне может понадобиться изменить некоторые переменные среды KornShell, но я не могу понять это.
ОБНОВЛЕНИЕ:
После приведенного ниже руководства Хенка... Я вижу, что знания разницы недостаточно, чтобы помочь мне решить основную проблему - то есть, чтобы скрипт на server1 распознавал символы \n как новую строку. Итак, я улучшил свой вопрос.
Примечания:
Server1 — это сервер Linux, а Server2 — Solaris.
Сведения об окружении > KornShell: — предложено Хэнком Лангевельдом.
На сервере1:
[kent@server1]$ ksh --version
version sh (AT&T Research) 93t+ 2010-02-02
[kent@server1]$ echo ${.sh.version}
bash: ${.sh.version}: bad substitution
[kent@server1]$ [ "${ERRNO}" ] && echo ksh88 || echo ksh93
ksh93
[kent@server1]$ [ "`echo "\c" | grep c`" ] && echo ksh93 || echo ksh88
ksh93
На сервере2:
# I'm am in bash
[kent@server2]$ ksh --version
$
$ ksh --version
$
[kent@server2]$ echo ${.sh.version}
bash: ${.sh.version}: bad substitution
[kent@server2]$ [ "${ERRNO}" ] && echo ksh88 || echo ksh93
ksh93
[kent@server2]$ [ "`echo "\c" | grep c`" ] && echo ksh93 || echo ksh88
ksh93
На серверах 1 и 2 я получаю одинаковое поведение:
$ echo -e "1\n2"
1
2
$ echo "1\n2"
1\n2
$ echo $'1\n2'
1
2
Код:
SEND_MAIL.sh
#Syntax: $ ksh SEND_MAIL.sh <to> <Subject> <body>
TO_REC=$1
SUBJECT=$2
MESSAGE=$3
echo "$MESSAGE"| mailx -s "$SUBJECT" $TO_REC
Поместите строку set | grep SH в сценарий на обоих серверах, чтобы проверить, на какой оболочке он работает, как предложено Oliver ниже.
На сервере1:
[kent@server1]$ ksh SEND_MAIL.sh [email protected] "Subject" ">>>123\n\n456$a"
KSH_VERSION=.sh.version
SHELL=/bin/bash
SHLVL=3
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
SSH_CLIENT='3.209.100.144 59645 22'
SSH_CONNECTION='3.209.100.144 59645 3.56.9.127 22'
SSH_TTY=/dev/pts/1
...
На сервере2:
[kent@server2]$ ksh SEND_MAIL.sh [email protected] "Subject" ">123\n\n456$a"
SHELL=/bin/ksh
SHLVL=1
SSH_CLIENT='3.209.100.144 49351 22'
SSH_CONNECTION='3.209.100.144 49351 3.56.29.159 22'
SSH_TTY=/dev/pts/2
...
echo)? - person Khaur   schedule 10.01.2013