오류 리디렉션에서는 무슨 일이 벌어지나요?

오류 리디렉션에서는 무슨 일이 벌어지나요?

Linux에 대해 읽는 동안 나는 다음을 얻었습니다.

stderr은 stdout과 동일하지 않기 때문에 위 예의 터미널 창에는 오류 메시지가 계속 표시됩니다.

stderr를 별도의 파일로 리디렉션하려면 stderr의 파일 설명자 번호(2), 보다 큼 기호(>), 실행 중인 명령이 stderr에 기록하는 모든 내용을 보관하려는 파일 이름을 사용합니다.

$ do_something 2> error-file

파일 설명자 2(stderr)에 기록된 모든 내용을 파일 설명자 1(stdout)과 동일한 위치에 두는 데 특별한 단축 표기법을 사용할 수 있습니다. 2>&1

$ do_something > all-output-file 2>&1

bash는 위의 구문을 더 쉽게 허용합니다.

$ do_something >& all-output-file

여기에 do_something몇 가지 명령이 있습니다. 위에 언급된 3가지 명령 모두에서 아래에서 무슨 일이 일어나고 있는지 실제로 알 수 없습니다. 프로세스를 백그라운드 프로세스로 만드는 데 사용된다는 것을 알고 있지만 &논리를 얻지 못했습니다. 저는 이 맛을 처음 접합니다. 누군가 이것을 설명해 줄 수 있나요?

답변1

>&는 와 완전히 다르기 때문에 혼란스러울 수도 있습니다 &.

>&또는 <&파일 설명자(fd)를 가리키도록 리디렉션에 사용됩니다. 위의 경우는 각각 stdout 및 stderr인 1과 2로 리디렉션됩니다.

>"stdout 리디렉션"을 의미합니다.

2>"fd 2(stderr) 리디렉션"을 의미합니다.

>&2"stdout을 fd 2(stderr)로 리디렉션"을 의미합니다. 이것이 >2"stdout을 파일 이름으로 리디렉션"을 의미하는 것과 어떻게 다른지 참고하세요. 2이것이 &중요한 이유입니다. 이는 다음 항목이 파일 이름이 아니라 fd가 될 것임을 나타냅니다.

물론 앞서 언급한 것처럼 a가 &리디렉션 기호 없이 단독으로 앉아 있는 경우 이는 완전히 다른 의미를 갖습니다. "즉시 반환하고 백그라운드에서 이전 명령을 실행합니다."

관련 정보