컴퓨터 가이 명령을 읽는 방법을 잘 모르겠습니다.
cat file1 file2 1> file.txt 2>&1
이해하면 2>&1
간단히 표준 오류를 표준 출력으로 리디렉션하십시오.
그 논리에 따라 명령은 다음과 같이 나에게 읽습니다.
-
파일을 연결
file1
하고file2
. -
stdout
이 작업에서으로 보냅니다file.txt
. -
전송
stderr
에stdout
. -
종료?
컴퓨터가 무엇을하는지 잘 모르겠습니다. 내 논리에 따르면 명령은
cat file1 file2 2>&1 > file.txt
그러나 이것은 정확하지 않습니다.
답변
과제를 사용하는 것이 더 쉽다는 것을 알게되었습니다.
>
처럼=
&
처럼$
당신은 시작합니다
1 = /dev/tty
2 = /dev/tty
그런 다음 첫 번째 예 1> file.txt 2>&1
는
1 = file.txt
2 = $1 # and currently $1 = file.txt
당신을 떠나
1 = file.txt
2 = file.txt
다른 방법으로 해본다면 다시 시작합니다
1 = /dev/tty
2 = /dev/tty
다음 2>&1 > file.txt
않습니다
2 = $1 # and currently $1 = /dev/tty
1 = file.txt
최종 결과는
1 = file.txt
2 = /dev/tty
님이 stdout
아닌 리디렉션 만했습니다 stderr
.
답변
리디렉션 순서는 중요하며 왼쪽에서 오른쪽 으로 읽어야 합니다.
예를 들면 다음과
command 2>&1 >somefile
같습니다.
- 리디렉션
stderr
(즉2
받는) 현재 의 목적지stdout
(이 점에서, 단말). - 그런 다음
stdout
로 이동하십시오somefile
.
따라서이 경우 stderr
터미널 stdout
로 이동하여 파일로 이동하십시오. 원하는 파일이 아닙니다.
반면에 다음을 command >somefile 2>&1
의미합니다.
- 리디렉션
stdout
에somefile
- 그런 다음 ( )
stderr
와 동일한 대상으로 리디렉션 하십시오 .stdout
somefile
이 마지막 경우 모두 stderr
로 stdout
이동하십시오 somefile
.
답변
cat file1 file2 1> file.txt 2>&1
>&
실제로 중복을 의미하며 dup 시스템 호출을 사용하여 이미 열린 파일에 새 파일 설명자를 매핑합니다.
따라서, 당신은 (실제로 bash) 전에 먼저 새 stdout을 열고 “stdout이 현재 설정된 모든 표준으로 리디렉션하십시오”라고 말합니다.