Ftp
當從 shell 腳本執行時,FTP“放置”不將文件複製到遠端主機,但在手動執行時將文件複製到遠端主機
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
如果您真的想要命令中的那些空格/製表符,那麼您需要更改為 heredoc 的這種形式:
$ ftp -n ${FTP_HOST} <<-STOP user ${FTP_USERNAME} ${FTP_PASSWORD} binary lcd ${FTP_FROM_DIR} cd ${FTP_TO_DIR} put ${reportFileName} STOP
每當您的 heredoc 中有空格/製表符時,您需要使用
<<-
for 告訴 shell 在執行其中包含的命令之前去除前導空格/製表符。關於使用 echo 的側邊欄
當您在腳本中解析變數並且您無辜地使用
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
.參考