[unix] 2> & 1 리디렉션에 대한 구문을 어떻게 기억하십니까?

니모닉 또는 시스템이 있습니까? 이것은 내가 항상 그것을 찾아야 만 몇 년 동안 나를 귀찮게했다



답변

C 프로그래머라면 &1“주소 1″로 생각할 수 있으므로 2>&1“파일 설명자 # 2를 # 1과 같은 위치로 리디렉션”이라고 읽습니다.


답변

“투투 원” ( “투” >)은 “투투 원” 보다 논리적으로 의미가 있습니다. “그리고 하나”를 하나의 명사 (장소)로 생각하면 문맥 상 문법적으로 의미가 있습니다. “2 대 1″과는 더 어려워요. “1 대”를 하나의 것으로 간주해야합니다. 명사, 그리고 그것은 여전히 ​​상황에 맞지 않을 것입니다.


답변

니모닉이 아니지만 다음과 같이 읽습니다.

0stdin입니다.
1stdout입니다.
2stderr입니다.
>에있다.
<밖으로입니다.
&파일 디스크립터입니다 (일부 쉘).

2>&1
2      >    &               1
stderr into file descriptor 1

redirect stderr into stdout

리디렉션 전에 파일 디스크립터를 엉망으로 만들면 변경 될 수 있습니다 …

2>somefile 1>&2
2      >    somefile     1      >    &2
stderr into somefile and stdout into file descriptor 2

redirect stderr into somefile and stdout into somefile.


답변

쓰면 2>&1“표준 오류는 표준 출력으로 간다”는 것입니다.

그것을 분해하자.

먼저 표준 오류는 2이고 표준 출력은 1입니다.

그래서 당신은 2무언가를 가지고 1있습니다.

“가다”가 쓰여집니다 >.

그래서 당신은 2>무언가를 가지고 있습니다 1.

2>filename표준 오류를에 보내는 것을 의미합니다 filename. 그러나이라는 파일로 보내지 않으려 고합니다 1. 이미 열려있는 파일 수와 같은 다른 것을 원합니다. 그게 다야 &.

그래서 2>&1.

당신이 어디에, 할당을하고있는 것처럼 당신은 또한 생각할 수 >등호처럼하고는 &유사한입니다 $, 비교 :

f=$1
2>&1

리디렉션이 여러 개인 명령 줄을 이해하려면 알아야 할 중요한 것은 리디렉션이 왼쪽에서 오른쪽으로 수행된다는 것입니다. 이에 대한 자세한 내용은 리디렉션 순서를 참조하십시오 .


답변

나는 그것이 항상 2-> 1임을 기억했다. Stderr to stdout.

중간 부분은 항상 어려운 부분이며, 나는 항상 날카로운 캐릭터가 온다는 것을 기억할 때까지 >, 그리고 실제로는 쓸 수없는 캐릭터를 기억하기 전까지는 항상 엉망으로 만들었습니다 &.

그러니 2&>1항상2>&1


답변

FD2가 STDERR이라는 것을 이해하면 “아, STDOUT (FD1)을 보내는 곳마다 STDERR을 캡처하십시오”라고 생각할 수 있습니다.


답변

우리 대부분은 항상 기억하지 않기 때문에 내 동료와 나는 보통, “이 1보다 크다”라고 stderr파일 기술자이다 2하고 stdout있다 1리디렉션에 대한 다른 니모닉 그래서 (유닉스 / 리눅스에 특히 신규) stderr정말 일을하지 않습니다 . 유일한 문제는 여전히 앰퍼샌드가 어디로 가는지 기억해야한다는 것입니다!