如何判断我的程序是否被管道传输给另一个人(Perl)

时间:2013-09-24 20:52:47

标签: perl

“ls”在输出输出时表现不同:

 
> ls ??? 
bar  foo 
> ls ??? | cat 
bar 
foo 

它是如何知道的,我将如何在Perl中执行此操作?

2 个答案:

答案 0 :(得分:14)

在Perl中,-t文件测试运算符指示文件句柄 (包括STDIN)已连接到终端。

还有-p测试运算符来指示文件句柄 附在管道上。

$ perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN'
term:1, pipe:0
$ perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN' < /tmp/foo
term:0, pipe:0
$ echo foo | perl -e 'printf "term:%d, pipe:%d\n", -t STDIN, -p STDIN'
term:0, pipe:1

perldoc -f -X上的文件测试操作员文档。

答案 1 :(得分:6)

use IO::Interactive qw(is_interactive);

is_interactive() or warn "Being piped\n";