我有一個bash腳本,裏面有一些scp命令。 它工作得很好,但是,如果我嘗試重新定向我的標準輸出「./myscript.sh> log」,只有我的顯式迴應顯示在「日誌」文件中。 scp輸出丟失。Bash,命令的標準輸出重定向像scp
if $C_SFTP; then
scp -r [email protected]$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
fi
好的,我現在該做什麼? 謝謝
我有一個bash腳本,裏面有一些scp命令。 它工作得很好,但是,如果我嘗試重新定向我的標準輸出「./myscript.sh> log」,只有我的顯式迴應顯示在「日誌」文件中。 scp輸出丟失。Bash,命令的標準輸出重定向像scp
if $C_SFTP; then
scp -r [email protected]$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
fi
好的,我現在該做什麼? 謝謝
scp
scp
正在使用交互式終端,以打印那個奇特的進度條。將輸出打印到文件根本沒有意義,因此scp
會檢測其輸出何時重定向到終端以外的其他位置,並禁用該輸出。
然而,有意義的是,如果有錯誤,將錯誤輸出重定向到文件中。如果需要,您可能需要禁用標準輸出。
有兩種可能的方法來做到這一點。首先是兩個標準錯誤重定向到調用腳本和標準輸出到日誌文件:
./myscript.sh >log 2>&1
其次,是要告訴的bash腳本中的這樣做的權利:
#!/bin/sh
exec 2>&1
if $C_SFTP; then
scp -r [email protected]$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
fi
...
如果您需要檢查錯誤,只是驗證$?
是0
執行scp命令後:
if $C_SFTP; then
scp -r [email protected]$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
RET=$?
if [ $RET -ne 0 ]; then
echo SOS 2>&1
exit $RET
fi
fi
另一種選擇是做set -e
y中我們的腳本告訴bash腳本儘快在腳本中的一條命令失敗時報告失敗:
#!/bin/bash
set -e
...
希望它有幫助。祝你好運!
不幸的是,SCP的輸出不能簡單地重定向到標準輸出。
我想要獲得我的SCP傳輸的平均傳輸速度,而且我唯一能做到的方式就是將stderr和stdout發送到文件,然後再次將文件回顯到stdout。
例如:
#!/bin/sh
echo "Starting with upload test at `date`:"
scp -v -i /root/.ssh/upload_test_rsa /root/uploadtest.tar.gz [email protected]:/home/speedtest/uploadtest.tar.gz > /tmp/scp.log 2>&1
grep -i bytes /tmp/scp.log
rm -f /tmp/scp.log
echo "Done with upload test at `date`."
這會導致如下輸出:
Starting with upload test at Thu Sep 20 13:04:44 SAST 2012:
Transferred: sent 10191920, received 5016 bytes, in 15.7 seconds
Bytes per second: sent 650371.2, received 320.1
Done with upload test at Thu Sep 20 13:05:04 SAST 2012.
你的貓只是測試你的TTY:
[ ~]#echo "hello" >/dev/tty
hello
如果這樣的作品,嘗試:
[ ~]# scp <user>@<host>:<source> /dev/tty 2>/dev/null
這對我有效...
我發現SCP一個粗略的解決方案:
$ scp -qv [email protected]$HOST:$SRC $DEST
按照SCP手冊頁,-q
(安靜)禁用進度表,以及禁止所有其他輸出。添加-v
(詳細),你會得到堆輸出...和進度計仍然被禁用!禁用進度表允許您將輸出重定向到文件。
如果你並不需要所有的認證調試輸出,輸出重定向到標準輸出和grep出位,你不想:
$ scp -qv [email protected]$HOST:$SRC $DEST 2>&1 | grep -v debug
最終輸出是這樣的:
Executing: program /usr/bin/ssh host myhost, user (unspecified), command scp -v -f ~/file.txt
OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1e 11 Feb 2013
Warning: Permanently added 'myhost,10.0.0.1' (ECDSA) to the list of known hosts.
Authenticated to myhost ([10.0.0.1]:22).
Sending file modes: C0644 426 file.txt
Sink: C0644 426 file.txt
Transferred: sent 2744, received 2464 bytes, in 0.0 seconds
Bytes per second: sent 108772.7, received 97673.4
另外,這可以被重定向到一個文件:
$ scp -qv [email protected]$HOST:$SRC $DEST 2>&1 | grep -v debug > scplog.txt
'如果[ 「$ RET」 -ne 「0」];那麼......「不需要」在0附近,-ne/-eq「會測試整數值。 – Anders 2010-10-08 13:31:43
@Anders:只是一種習慣,改變了這一點。 – 2010-10-08 13:39:59