我有一个相当奇怪的情况.我正在尝试使用Perl自动备份SVN存储库集合.我正在炮轰svnadmin dump命令,该命令将转储发送到STDOUT,以及遇到STDERR的任何错误.
我需要运行的命令将采用以下形式:
svnadmin dump $repo -q >$backupFile
Run Code Online (Sandbox Code Playgroud)
STDOUT将转到备份文件,但是,我需要在我的Perl脚本中捕获STDERR.
处理这种情况的正确方法是什么?
编辑:澄清:STDOUT将包含SVN转储数据STDERR将包含可能发生的任何错误
STDOUT需要以文件结尾,而STDERR需要以Perl结尾.在任何情况下都没有任何东西,但STDOUT的原始内容最终会在该流中或转储将被破坏,我会有比没有备份更坏的东西,一个糟糕的!
好吧,在perl中也有通用的方法,但是bash解决方案(上面让我认为你正在寻找)是将stderr 首先重定向到stdout,然后将stdout重定向到文件.直觉上,在看到内部发生的事情发生之前,这并没有多大意义.但这有效:
svnadmin dump $repo -q 2>&1 >$backupFile
Run Code Online (Sandbox Code Playgroud)
不过,千万不能做它的其他方式(即,将2>&1日结束),或者两者输出和错误的所有输出将转到您的文件.
你想要的是这个:
# perl -e 'print STDERR "foo\n"; print "bar\n";' 2>&1 > /tmp/f
foo
# cat /tmp/f
bar
Run Code Online (Sandbox Code Playgroud)
特别是你不想要这个:
# perl -e 'print STDERR "foo\n"; print "bar\n";' > /tmp/f 2>&1
# cat /tmp/f
foo
bar
Run Code Online (Sandbox Code Playgroud)