我有一個bash腳本,上傳通過SFTP文件,像這樣的命令:如何重定向多行重定向輸入bash後的輸出?
sshpass -pABC123 sftp [email protected] << !
cd data
put /path/file.txt
bye
!
我從我的bash腳本的電子郵件通知時,過程就完成了。我想將這個命令的實際輸出(來自服務器的響應或來自sshpass的錯誤)捕獲到變量或文本文件中,並將其包含在我的電子郵件中。
我有什麼選擇重定向輸出。我知道我可以把命令到$()來捕獲其輸出,並且我可以用>>爲好,但與多輸入,我不認爲這會工作...
我已經試過這樣:
SFTP_RESULT = (
sshpass -pABC123 sftp [email protected] << !
cd data
put /path/file.txt
bye
!
)
而且我自己也嘗試:
sshpass -pABC123 sftp [email protected] << ! >> /file.txt
和
sshpass -pABC123 sftp [email protected] >> /file.txt << !
所有這些簡單的返回回我的C我正在發送到遠程服務器的命令。我沒有看到來自服務器的任何響應。當我用上面的任何一個命令行運行腳本時,我在屏幕上看到了這些響應。
有沒有人有任何建議?
UPDATE
我已經接受了答案從拉爾斯Kotthoff即使它並不完美,但基於他的答案和我們的意見,他的回答我想通了討論。這是我做過什麼:
首先我感動的SFTP命令到外部文件名爲「sftp_commands」
echo $(cat sftp_commands | sshpass -pABC123 sftp [email protected] 2>&1) >> sftp.log
出於某種原因,該工程。
當我這樣做時,我的輸出文件只包含我發送到其他服務器的命令。 (它重複cd數據,put/path ..等)它不會顯示服務器的響應。當我從命令行運行它時,似乎響應仍然是stdout。 – ethanpil 2012-03-19 19:40:30
您是否嘗試過重定向stderr? 2>&1 >>文件 – 2012-03-19 19:54:07
同樣的結果。只顯示我自己的命令。 – ethanpil 2012-03-19 20:01:18