STDIN, STDOUT 등과 연관된 파일 설명자를 식별하는 방법

STDIN, STDOUT 등과 연관된 파일 설명자를 식별하는 방법

나는 이것을 알려주는 일부 명령이나 환경 변수를 기억하는 것 같습니다. 예를 들어, 저는 기본적으로 터미널에서 무언가를 실행하고 싶습니다.

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와 같은) 쉘에서 이러한 fd를 열려면 다음을 수행할 수 있습니다.

lsof -ap "$$" -d 0-1

Linux 또는 Cygwin에서는 다음도 참조하세요.

realpath /dev/stdin /dev/stdout

출력은 소켓이나 파이프이지만 거의 사용되지 않습니다.

다시 Linux에서 to를 추가하면 -E특정 lsof유형의 파일(예: 파이프, 의사 tty 또는 특정 소켓)에 다른 쪽 끝에 있는 내용(있는 경우)에 대한 추가 정보를 제공할 수 있습니다.

최신 버전에는 다음과 동일한 정보를 제공하는 유틸리티(Linux 전용) util-linux도 있습니다 .lsfdlsof

lsfd -p "$$" -Q '(fd == 0) or (fd == 1)'

또는

lsfd -p "$$" -Q 'assoc =~ "^[01]$"'

¹ rc와 유사한 셸에서는 and $pid대신 다음을 사용하세요 .$$fish$fish_pid

관련 정보