ftp -n ${FTP_HOST} << STOP
user ${FTP_USERNAME} ${FTP_PASSWORD}
binary
lcd ${FTP_FROM_DIR}
cd ${FTP_TO_DIR}
put ${reportFileName}
STOP
私のコードは次のとおりです。ファイルをリモートホストに正常にコピーできませんでしたが、手動で使用すると、ファイルはリモートホストに正常にコピーされます。
スクリプトで実行すると、コンソールに「(ローカルファイル)の使用法:ローカルファイルのリモートファイルを入れる」と表示されます。
何が問題なのでしょうか?
答え1
私はあなたの問題のいくつかが区切り文字を構成する方法にあると思います。次のようにしてみてください。
$ ftp -n ${FTP_HOST} << STOP
user ${FTP_USERNAME} ${FTP_PASSWORD}
binary
lcd ${FTP_FROM_DIR}
cd ${FTP_TO_DIR}
put ${reportFileName}
STOP
コマンドでこれらのスペース/タブを実際に使用するには、次の形式のheredocに変更する必要があります。
$ ftp -n ${FTP_HOST} <<-STOP
user ${FTP_USERNAME} ${FTP_PASSWORD}
binary
lcd ${FTP_FROM_DIR}
cd ${FTP_TO_DIR}
put ${reportFileName}
STOP
区切られた文書にスペース/タブがあるときはいつでも、forを使用して<<-
その中に含まれるコマンドを実行する前に、前のスペース/タブを削除するようにシェルに指示する必要があります。
エコ使用のためのサイドバー
スクリプトで変数を解析し、誤ってそれを使用してecho
メッセージを印刷する場合は、興味のある文字列よりも多くを取得することがよくあります。echo
末尾の改行文字も含まれます。この例では確認できます。
$ echo $(echo hi) | hexdump -C
00000000 68 69 0a |hi.|
00000003
0a
改行文字のASCIIコードです。したがって、-n
この動作を無効にするには、通常、次のスイッチを使用する必要がありますecho
。
$ echo -n $(echo hi) | hexdump -C
00000000 68 69 |hi|
00000002
またはprintf
。