В bash / ksh / dash:
$ input_redirected() { [[ -t 0 ]] && echo input is not redirected || echo input is redirected; }
$ input_redirected foo
input is not redirected
$ input_redirected < /dev/null
input is redirected
$ cat /etc/passwd | input_redirected
input is redirected
в рыбе
$ function input_redirected; test -t 0; and echo not redirected; or echo redirected; end
$ input_redirected foo
not redirected
$ input_redirected < /dev/null
not redirected
$ cat /etc/passwd | input_redirected
not redirected
Однако использование isatty 0
вместо test -t 0
дает ожидаемый результат.
Что такое test -t FD
проверка, выполняемая на рыбе, которая не ведет себя так же, как оболочка POSIX-типа?