换行符在 server2 (Solaris) 上被正确识别,而backslashn在 server1 (Linux) 上被视为字符。我该如何纠正?
在处理一个接受参数并发送邮件的简单脚本时,我首先注意到这种相当奇怪的行为..
句法:$ ksh SEND_MAIL.sh <to> <Subject> <body>
现在,当我在 server-1 上运行该脚本时
[kent@server1] $ ksh SEND_MAIL.sh name@site.com "Subject" "123\n456" [Thu Jan 10 10:51:18 EST 2013] - 开始发送邮件到:name@site.com,带有主题\'>>>123\n456\'
请注意,换行符被视为 backlash-n。
在 server-2 上,
\n
特殊字符正确扩展为换行符。[kent@server2] $ ksh SEND_MAIL.sh name@site.com "Subject" "123\n456" [Thu Jan 10 10:51:18 EST 2013] - 开始发送邮件到:name@site.com,带有主题\'>>>123 456\'
我想我可能需要更改一些 KornShell 环境变量,但我无法弄清楚。
更新:
在下面 Henk 的指导之后......我发现知道差异并不足以帮助我解决主要问题 - 即让 server1 上的脚本将\n
字符识别为换行符。所以我改进了我的问题。
笔记:
Server1 是 Linux 服务器,而 Server2 是 Solaris。
环境详细信息 > KornShell: - 正如Henk Langeveld所建议的那样
在服务器 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
按照Oliver的建议,将该行set | grep SH
放入两台服务器上的脚本中,以检查它正在运行的 shell 。
在服务器 1 上:
[kent@server1]$ ksh SEND_MAIL.sh kent@123.com "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 kent@123.com "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
...