如何获得控制终端的真实名称?
如何获得控制终端的真实名称(如果存在,否则为错误)作为路径名? 所谓“实名”,是指not /dev/tty,其他任意进程都不能使用它来指代同一终端。如果可能,我更倾向于将答案作为简单的shell代码(如下面的示例),否则作为C函数。 请注意,即使重定向了标准输入,此操作也必须起作用,以使该tty实用程序无法使用:not a tty在这种情况下,可能会出现错误,因为tty仅打印连接到标准输入的终端的文件名。 在Linux下,可以使用: echo "/dev/`ps -p $$ -o tty | tail -n 1`" 但这不是可移植的,因为根据POSIX,终端名称的格式未指定。 关于C函数,ctermid (NULL)return /dev/tty,在这里没有用。 注意:根据zsh文档,一个应该可以 zsh -c 'echo $TTY' 但是当同时重定向标准输入和标准输出时,当前(版本5.0.7)失败: $ zsh -c 'echo $TTY > /dev/tty' < /dev/null /dev/pts/9 $ zsh -c 'echo $TTY > /dev/tty' < /dev/null > /dev/null /dev/tty