Bash에서는 파일 설명자와 파일 사이의 연결을 만들 수 있습니다. 예를 들면 다음과 같습니다.
exec > /path/to/myfile
fd 1을 파일에 연결합니다.
fd가 어떤 파일에도 연결되지 않도록 연결된 모든 파일에서 fd의 연결을 끊는 방법을 알고 싶습니다. 및 파일 /dev/null
입니다 /dev/tty
.
감사해요.
내 목적은 알아내는 거야쉘은 파일 설명자 0, 1, 2를 제어 터미널에 자동으로 연결합니까?bash
, 동일한 bash 쉘에서 실행하기 전에 bash에서 fd 0, 1 및 2의 연결을 끊으십시오.
답변1
원하는 것은 >&-
(기본 fd 1) 또는 <&-
(기본 fd 0) 연산자를 사용하여 Bourne과 같은 쉘에서 수행되는 파일 설명자를 닫는 것입니다.
exec >&-
exec 1>&-
exec 1<&-
동일하며 close(1)
시스템 호출이 발생합니다.
파일 설명자 0, 1, 2를 닫는 것은 일반적으로 좋지 않은 생각입니다. 대부분의 명령은 이러한 파일 설명자가 열려 있을 것으로 예상하고(이것은 stdin, stdout 및 stderr입니다), 파일을 열면 파일이 열릴 수 있기 때문입니다. 의도치 않게 stdin/stdout/stderr가 되어 stdout이나 stderr에 인쇄하는 모든 내용이 결국 이 파일에 기록될 수 있습니다.