将SCP的标准输出发送到屏幕,将STDERR发送到文件

时间:2012-07-23 19:27:53

标签: shell stdout scp stderr

有很多关于如何在使用SCP时重定向和错误重定向的讨论,或者只是stdout本身,但我很好奇是否有人知道如何在stdout继续打印到屏幕时将stderr重定向到文件。

目前,如果我们像这样重定向stderr:

scp user@XXXX:*.txt  . 2>errfile.txt

stdout上没有显示任何内容,只在errfile.txt中捕获错误和回声。

1 个答案:

答案 0 :(得分:0)

以下是它的工作原理

MPBAB:work anj$ cat test.sh
echo "Hello there"
echo "This is a test script"

badcommand
MPBAB:work anj$ ./test.sh 2> err.log
Hello there
This is a test script
MPBAB:work anj$ cat err.log
./test.sh: line 4: badcommand: command not found

正如您所看到的,当test.sh尝试调用badcommand时,它会抛出错误。但是,这两个echo语句工作正常,显示在STDOUTSTDERR已登录err.log

现在实施您尝试的方式 -

MPBAB:work anj$ ./test.sh . 2>err.log
Hello there
This is a test script
MPBAB:work anj$ cat err.log
./test.sh: line 4: badcommand: command not found

以同样的方式工作。在您的情况下,我被迫认为您发出的scp命令不正确。 scp需要sourcedestination。像这样的东西(我希望scp test.txt到远程服务器)

MPBAB:work anj$ scp ./test.txt user@secure.server.com:/home/data 2>scperr.txt
user@secure.server.com's password: #<this is because I dont have the public key installed>
test.txt              100%  291     0.3KB/s   00:00    
MPBAB:work an$ cat scperr.txt
MPBAB:work anj$ 

您看,文件已被复制,并在test.txt 100% 291 0.3KB/s 00:00中显示STDOUT,因为没有错误scperr.txt为空。