“ls”在输出输出时表现不同:
> ls ???
bar foo
> ls ??? | cat
bar
foo
它是如何知道的,我将如何在Perl中执行此操作?
答案 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";