我似乎记得一些命令或环境变量告诉你这一点。例如,我基本上想要在终端上执行的东西,给你
echo $STDIN
/dev/tty
echo $STDOUT
/dev/tty
fdescribe 0 or fdescribe /dev/stdin
/dev/tty
fdescribe 1 or fdescribe /dev/stdout
/dev/tty
但可以在脚本或子进程中执行
答案1
嗯,根据定义,fd 0 与 stdin 相关联,fd 1 与 stdout 相关联。
如果你想知道什么文件在(类似 Bourne 或类似 csh 的 )shell 中打开这些 fd,您可以执行以下操作:
lsof -ap "$$" -d 0-1
在 Linux 或 Cygwin 上,另请参阅:
realpath /dev/stdin /dev/stdout
尽管输出是套接字或管道,但用处不大。
再次在 Linux 上,添加-E
tolsof
可以为某些类型的文件(例如管道、伪 tty 或某些套接字)提供更多信息,以了解另一端的内容(如果有)。
最新版本util-linux
还有一个lsfd
实用程序(特定于 Linux),可以为您提供一些与以下内容相同的信息lsof
:
lsfd -p "$$" -Q '(fd == 0) or (fd == 1)'
或者
lsfd -p "$$" -Q 'assoc =~ "^[01]$"'
¹ 在类似 rc 的 shell 中,使用$pid
代替$$
和fish
:$fish_pid