我注意到 BASH 的条件表达式列表中有一个-t
表达式,用于测试文件描述符是否是开放的终端。我尝试了以下操作:
if [[ -t $(tty) ]]; then
echo open terminal $(tty)
else
echo not open terminal $(tty)
fi;
并得到我的回应
not open terminal /dev/pts/35
我已经从控制台尝试了同样的事情并得到了
not open terminal /dev/tty1
在手册页中将-t
其参数描述为FD
“文件描述符”,而不是将参数描述为其他条件表达式FILE
有人可以为“文件描述符”提供成功的 BASH 测试吗?该测试是“打开”并且“引用终端”吗?
答案1
文件描述符是小的整数。
具体来说,stdin
是 fd 0;stdout
是 fd 1;stderr
是 fd 2。
您可能已经在以下行中看到“文件描述符”的相同用法:
./cmd 2>&1
这意味着“运行./cmd
,将 fd 2 (stderr) 重定向到 fd 1 (stdout)。
的正常用途-t
是判断输入是否来自终端:
[[ -t 0 ]] && echo "Input is coming from a terminal"