有很多关于使用 SCP 时如何重定向 out 和 err 的讨论,或者只是 stdout 本身,但我很好奇是否有人知道如何在 stdout 继续打印到屏幕时将 stderr 重定向到文件。
目前,如果我们像这样重定向stderr:
scp user@XXXX:*.txt . 2>errfile.txt
stdout 上不显示任何内容,在 errfile.txt 中只捕获错误和回显。
这是它的工作原理
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
语句工作得很好,并显示在STDOUT
和STDERR
登录到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
需要一个source
和destination
。像这样的东西(我想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
是空的。