改行文字は、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\'
改行文字はバックラッシュ-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 環境変数を変更する必要があると思いますが、それがわかりません。
アップデート:
以下のヘンクのガイダンスの後...違いを知るだけでは、主な問題を解決するのに十分ではないことがわかりました-つまり、server1のスクリプトに\n
文字を改行として認識させることです。だから私は私の質問を改善しました。
ノート:
Server1 は Linux サーバーで、Server2 は Solaris です。
環境の詳細 > KornShell: - Henk Langeveldの提案による
server1:
[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
server2:
# 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
に、両方のサーバーのスクリプトに行を入れて、実行されているシェルを確認します。
server1:
[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
...
server2:
[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
...