리디렉션 사용 방법을 어떻게 기억하나요?

리디렉션 사용 방법을 어떻게 기억하나요?

내가 뭘 알 겠어

  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)가 표시됩니다.

관련 정보