Sun*_*nny 7 perl redirect system-calls stderr
我在Perl中使用了一些系统命令.
在下面的例子中,我获得如下输出:
ls: import-log.*: No such file or directory
ls: error-log.*: No such file or directory
No specified files found for deletion
Run Code Online (Sandbox Code Playgroud)
我的代码:
sub monthoryear()
{
@importlog = `ls -al import-log.*`;
@errorlog = `ls -al error-log.*`;
}
Run Code Online (Sandbox Code Playgroud)
即使没有文件,我也不希望在输出中看到以下内容.
ls: import-log.*: No such file or directory &
ls: error-log.*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
DVK*_*DVK 14
虽然其他答案对于您提出的确切技术问题是正确的,但您还应该考虑不在Perl中编写有效的shell脚本.
您应该使用Perl本地方法获取文件列表(例如glob()
或File::Find
),而不是调用反向链接ls
.
将STDERR重定向到空设备:
use File::Spec;
open STDERR, '>', File::Spec->devnull() or die "could not open STDERR: $!\n";
Run Code Online (Sandbox Code Playgroud)
您可以stderr
在subshell命令中添加重定向:
@importlog = `ls -al import-log.* 2>/dev/null`;
@errorlog = `ls -al error-log.* 2>/dev/null`;
Run Code Online (Sandbox Code Playgroud)