„ls” zachowuje się inaczej, gdy jego produkcja jest rurami:Jak sprawdzić, czy mój program jest rurami do drugiej (Perl)
> ls ???
bar foo
> ls ??? | cat
bar
foo
Jak to wiedzą, i jak zrobić to w Perl?
„ls” zachowuje się inaczej, gdy jego produkcja jest rurami:Jak sprawdzić, czy mój program jest rurami do drugiej (Perl)
> ls ???
bar foo
> ls ??? | cat
bar
foo
Jak to wiedzą, i jak zrobić to w Perl?
W Perl, prowadzący badania -t
pliku wskazuje, czy uchwyt pliku (w tym STDIN
) jest połączony z zaciskiem.
Istnieje również operator testowy -p
, który wskazuje, czy uchwyt do pliku jest podłączony do rury.
$ 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
Dokumentacja operatora testu pliku pod numerem perldoc -f -X
.
Bardzo miło! Dziękuję Ci. – barrycarter
use IO::Interactive qw(is_interactive);
is_interactive() or warn "Being piped\n";
Wydaje mi się to bardzo dobrym pytaniem. – friedo
To trochę różni się od drugiego pytania: pyta o rury konkretnie, nie ttys, choć zgadzam się, że jest sporo nakładania się. – barrycarter