【发布时间】:2012-11-29 18:19:17
【问题描述】:
对于我即将推出的 PulseAudio 库,我想在逻辑上将 STDERR 和 STDOUT 重定向到 /dev/null,这是可行的,
sub _exec {
open (*STDERR, '>', '/dev/null');
open (*STDOUT, '>', '/dev/null');
CORE::system('pacmd', @_ ) or die $?;
但是,这仍然输出到术语....
sub _exec {
local ( *STDERR, *STDOUT );
open (*STDERR, '>', '/dev/null');
open (*STDOUT, '>', '/dev/null');
CORE::system('pacmd', @_ ) or die $?;
这让我有两个问题
- 首先,为什么我会遇到我所看到的行为?
- 其次,有没有更有效的方法,不涉及存储旧值并替换它?
【问题讨论】:
-
可能很明显,但您是否考虑过类似
CORE::system('pacmd &> /dev/null' ) or die $? -
@perreal 我不这样做是有原因的,您的陈述有效,因为参数已传递给外壳。我明确不希望我的命令传递给 shell。仅仅因为我想隐藏 stderr 和 stdout 就在 CPAN 上放置一个使用 shell-exec 的库似乎很恶心。
标签: perl redirect stdout stderr