首页 > 解决方案 > `test` 命令的 `-t` 运算符不能正确识别非 tty 文件描述符

问题描述

在 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 类型的 shell 不同?

标签: fish

解决方案


这是一个错误:https ://github.com/fish-shell/fish-shell/issues/1228

解决方法是使用command test,这也是isatty所见所闻type isatty


推荐阅读