2012-03-19 86 views
1

我有一個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 

出於某種原因,該工程。

回答

0

重定向工作:像你想使用一個expect腳本

$ cat << ! > /tmp/foo 
> foo 
> bar 
> ! 
$ cat /tmp/foo 
foo 
bar 
+0

當我這樣做時,我的輸出文件只包含我發送到其他服務器的命令。 (它重複cd數據,put/path ..等)它不會顯示服務器的響應。當我從命令行運行它時,似乎響應仍然是stdout。 – ethanpil 2012-03-19 19:40:30

+0

您是否嘗試過重定向stderr? 2>&1 >>文件 – 2012-03-19 19:54:07

+0

同樣的結果。只顯示我自己的命令。 – ethanpil 2012-03-19 20:01:18

1

聽起來給我。期望應該可用於您的操作系統和分配。

除此之外,請參閱是否可以使用scp,這通常在啓用了sftp的服務器上可用。這可能是更容易只是:

scp /path/file.txt [email protected]:data/ 

注意,它可能是一個更好的主意來設置SSH公共密鑰,而不是使用sshpass。

+0

不幸的是遠程服務器的管理員不會執行公鑰。也許他們不知道如何或可能他們不明白它是最安全的,但他們阻止了我。它會救我幾個小時的惡化,但我放棄了與他們爭論,我只是想繼續前進。我沒有看到我可以用scp預設密碼。我會考慮期待......謝謝 – ethanpil 2012-03-19 19:46:52

+0

如果你有通過SSH訪問服務器上的shell,你可以自己設置你的公鑰。只需從啓動連接的計算機獲取〜/ .ssh/id_ [dr] sa.pub文件,並將其放置在遠程服務器上的〜/ .ssh/authorized_keys中。 (如果你只能訪問服務器,這可能是不可能的。) – ghoti 2012-03-20 10:53:23