Ftp

當從 shell 腳本執行時,FTP“放置”不將文件複製到遠端主機,但在手動執行時將文件複製到遠端主機

  • September 26, 2014
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.

參考

引用自:https://unix.stackexchange.com/questions/157641