내가 뭘 알 겠어
program > /dev/null 2>&1
하다. 이는 출력이 전송된 동일한 위치로 출력을 리디렉션하고 오류 출력을 의미합니다 /dev/null
.2>&1
내 문제는 기억이 나지 않기 때문에 항상 Google에 검색해야 한다는 것입니다.
그래서 저는 시도합니다 ... &2>1
구글 에 검색할 때까지 모든 조합을 시도합니다...1>2&
1>&2
기억하기 쉽게 만드는 팁은 무엇인가요?
답변1
오류보다 출력이 선호되므로 출력이 우선합니다(1 대 2).
>
"가다"의 줄임말입니다. 왼쪽은 내가 보내고 싶은 내용이고, 오른쪽은 내가 보내고 싶은 곳이에요. "where"는 (거의) 항상 파일이므로 다음과 같습니다.
program > /dev/null 2>1
이름이 1인 파일로 리디렉션됩니다. 따라서 & 기호는 (&)
파일을 파일 설명자로 수정합니다.
불행하게도 나는 나만의 니모닉을 접하거나 개발한 적이 없지만 *nix를 처음 배울 때 이 논리적 접근 방식이 잘 작동한다는 것을 알았습니다. 몇 번 연습하면 제2의 천성이 됩니다.
답변2
한 가지 비결은 1 = 표준 출력, 2 = 표준 오류를 기억하는 것입니다. 그래서:
2>&1
= 표준 오류 스트림은 표준 출력 스트림으로 이동합니다.
1>&2
= 그 반대.
C와 유사한 언어로 프로그래밍한 적이 있다면 앰퍼샌드( )를 기억하기 쉽습니다 &
. 나는 파일 자체를 변경하거나 새 파일을 생성하지 않도록 기존 파일 설명자를 참조하는 "주소"로 생각하기로 결정했습니다.
답변3
매듭 으로 생각하는 것이 &
도움이 될 수 있습니다 . 무엇을 하고 싶은지 생각하고 출력 2를 가져와서 2>
1로 묶으면 됩니다.2>&1
답변4
다음 세 가지 옵션을 고려해 보겠습니다.
program 2>1
program 2>1&
program 2>&1
첫 번째는 stderr를 파일 이름 "1"로 보냅니다. 결국 bash는 파일로의 리디렉션을 기대합니다.
두 번째 파일도 동일한 파일로 리디렉션되지만 program
백그라운드에서 실행됩니다. 이것이 바로 후행을 &
의미합니다.
이는 bash 세계에서 의미가 있는 파일 핸들에 대한 유일한 리디렉션으로 세 번째 가능성을 남깁니다.
0, 1, 2 중 어느 것을 기억하는가? 콘솔에서 컴퓨터를 실행해 보세요. 먼저 뭔가를 입력해야 합니다(0=stdin). 그러면 출력(1=stdout)이 표시됩니다. 마지막으로, 문제가 발생한 경우에만 stderr(2)가 표시됩니다.