"ls" si comporta in modo diverso quando la sua uscita viene convogliata:Come sapere se il mio programma viene convogliato ad un altro (Perl)
> ls ???
bar foo
> ls ??? | cat
bar
foo
Come fa a sapere, e come farei questo in Perl?
"ls" si comporta in modo diverso quando la sua uscita viene convogliata:Come sapere se il mio programma viene convogliato ad un altro (Perl)
> ls ???
bar foo
> ls ??? | cat
bar
foo
Come fa a sapere, e come farei questo in Perl?
In Perl, l'operatore di verifica -t
file indica se un filehandle (compresi STDIN
) è collegato ad un terminale.
C'è anche l'operatore di prova -p
per indicare se un filehandle è collegato a una pipe.
$ 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
Documentazione operatore file di prova su perldoc -f -X
.
MOLTO bello! Grazie. – barrycarter
use IO::Interactive qw(is_interactive);
is_interactive() or warn "Being piped\n";
Questa mi sembra una domanda perfettamente soddisfacente. – friedo
Questo è leggermente diverso dall'altra domanda: si tratta di pipe specifiche, non di ttys, anche se sono d'accordo che c'è un po 'di sovrapposizione. – barrycarter