답변:
숫자는 파일 설명자이며 처음 세 개 (0으로 시작) 만 표준화 된 의미를 갖습니다.
0 - stdin
1 - stdout
2 - stderr
따라서 명령에서 이러한 각 숫자는 파일 설명자를 나타냅니다. 파일 디스크립터를 사용하여 파일로 >
리디렉션하거나 다른 파일 디스크립터를 사용하여 다른 파일 디스크립터로 리디렉션 할 수 있습니다>&
3>&1
명령 줄에서 새 파일 기술자를 만들고로 리디렉션됩니다 1
이다 STDOUT
. 지금 1>&2
에 파일 기술자 1 리디렉션 STDERR
및 2>&3
3에 파일 기술자 2를 리디렉션합니다 STDOUT
.
그래서 기본적으로 당신은 전환 STDOUT
과 STDERR
이러한 단계입니다 :
이제 프로그램이 파일 디스크립터 1에 무언가를 인쇄하면 파일 디스크립터 2에 인쇄되고 그 반대로도 인쇄됩니다.
stdout
와 교환 하고 stderr
있습니다.
>name
출력을 파일로 리디렉션하는 것을 의미합니다 name
.
>&number
출력을 파일 디스크립터로 리디렉션하는 것을 의미합니다 number
.
따라서 &
셸에 파일 이름이 아닌 파일 설명자를 의미해야합니다.
파일 디스크립터는 이미 열린 파일을 나타내는 숫자입니다. 표준은 0
표준 입력, 1
표준 출력 또는 2
표준 오류에 대한 것입니다. 를 사용하여 새 변수를 만들 때와 마찬가지로 다른 숫자를 사용하여 새 파일 설명자를 만듭니다 var=value
.
기본적으로 파일 디스크립터 1
와 2
로 이동하여 새 쉘에서 /dev/tty
실행 somecommand 3>&1 1>&2 2>&3
하는 경우 아무것도 변경하지 않습니다 (지금은 파일 디스크립터 번호가 3 임).
그러나 스크립트 앞의 어딘가에서 exec (예 :)를 사용하여 리디렉션을 exec 2>error.log
수행하거나 리디렉션 (예 ./thescript 2>error.log
:)을 포함한 명령 줄로 스크립트를 실행하면 stdout과 stderr를 바꾸면 무언가가 수행됩니다.
특정 경우에 stdout과 stderr가 서로 바뀐 명령은 dialog
입니다. 그 살펴보면 man 페이지 , 나는 참조
Some widgets, e.g., checklist, will write text to dialog's output.
Normally that is the standard error
아마도 스크립트를 작성한 사람 은 어떤 이유로 대신에 dialog
출력을 원할 stdout
것입니다 stderr
.
리디렉션 순서 참조
스크립트 작성기는 다음과 같이 fd 3을 정의했습니다.
exec 3<> File.txt
"File.txt"를 열고 fd 3을 할당하십시오. 최대 파일 설명자 : 255
read -n 4 <&3
4 자만 읽습니다.
echo -n . >&3
거기에 소수점을 쓰십시오.
exec 3>&-
fd 3을 닫습니다.
cat File.txt
==> 1234.67890