当输出被输出时,"ls"表现不同:
> ls ???
bar foo
> ls ??? | cat
bar
foo
Run Code Online (Sandbox Code Playgroud)
它是如何知道的,我将如何在Perl中执行此操作?
mob*_*mob 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
Run Code Online (Sandbox Code Playgroud)
文件测试操作员文档perldoc -f -X.
use IO::Interactive qw(is_interactive);
is_interactive() or warn "Being piped\n";
Run Code Online (Sandbox Code Playgroud)