Solaris プラットフォームでは正常に実行されますが、Linux プラットフォームでは機能しないシェルスクリプトがあります。失敗したコードスニペットは次のとおりです。
[...]
while read line
do
insert_into_table="insert into isam_subrack_tbl (select neId, friendlyName, eqptHolderActualType from $line)"
$MYSQL_HOME/bin/mysql --socket=/tmp/mysql.sock -u$MYSQL_USER -p$MYSQL_PWD --host $MYSQL_HOST -Demlplatform -e "$insert_into_table"
done < isam_subrack2.txt 2> /dev/null
[...]
デバッグモードでスクリプトを実行すると、次のようになります。
bash-4.1$ sh -vvx test.sh
[...]
while read line
do
insert_into_table="insert into isam_subrack_tbl (select neId, friendlyName, eqptHolderActualType from $line)"
$MYSQL_HOME/bin/mysql --socket=/tmp/mysql.sock -u$MYSQL_USER -p$MYSQL_PWD --host $MYSQL_HOST -Demlplatform -e "$insert_into_table"
done < isam_subrack2.txt 2> /dev/null
test.sh: line 98: syntax error near unexpected token `done'
'est.sh: line 98: `done < isam_subrack2.txt 2> /dev/null
コマンドを試しましたがdos2unix
役に立ちませんでした。
whileループでなぜこのエラーが発生するのか知っていますか?
ベストアンサー1
問題の手がかりは次のとおりです。
test.sh: line 98: syntax error near unexpected token `done' 'est.sh: line 98: `done < isam_subrack2.txt 2> /dev/null
2行目は通常次のとおりです。
test.sh: line 98: `done < isam_subrack2.txt 2> /dev/null'
ご覧のとおり、エラーメッセージの後続の引用符は行の先頭にあります。これは、テキストファイルに予期しないCR文字が表示される症状です。すでにファイルを実行していることが確認されていますがdos2unix
、次のように再実行することをお勧めします。
tr -d '\015' < src.sh > dst.sh