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