Curl

如何從 LFTP 擷取輸出?(輸出未寫入 STDOUT 或 STDERR?)

  • September 21, 2018

我想從 lftp 獲取進度資訊。目前,我正在使用 curl 像這樣:

curl http://example.com/file -o file -L 2> download.log

這會將 curl 的進度資訊寫入 download.log 文件,我可以跟踪該文件以獲得實時進度。

但同樣的方法不適用於 lftp,無論是標準輸出還是標準錯誤。我最終得到一個空的 download.log 文件,直到傳輸完成。

lftp -e 'get http://example.com/file;quit' 2> download.log
lftp -e 'get http://example.com/file;quit' 1> download.log

當我不重定向輸出時,我會在螢幕上看到進度。當我重定向輸出時,我停止在螢幕上看到進度,但在 download.log 中沒有顯示任何內容。文件傳輸完成後,我看到了最終結果,如下所示 - 但之前沒有:

97618627 bytes transferred in 104 seconds (913.1K/s)

lftp 的輸出是否在做一些不尋常的事情 - 列印到螢幕而不列印到 stdout/stderr?除了重定向 stdout/stderr 之外,還有其他擷取螢幕輸出的方法嗎?

在我看來,它正在緩衝它的輸出。您可以嘗試unbuffer expect腳本(手冊頁)。

set通過在 lftp 中輸入命令查看“log:file/xfer”預設設置。

可能的輸出:

set log:file/xfer /home/USERNAME/.local/share/lftp/transfer_log

您可以通過不同的方式改變這一點。

lftp -c 'open -e "set log:file/xfer /home/USERNAME/myown.log; mget *.csv; bye" -u uname,psswd 172.16.100.101' >> $log

引用自:https://serverfault.com/questions/139662