Bash '모호한 리디렉션' 메시지를 방지하기 위한 올바른 구문

Bash '모호한 리디렉션' 메시지를 방지하기 위한 올바른 구문

stdout아래 명령을 사용하여 기존 파일에 누적되어 다른 파일에 오류 메시지를 보내는 명령을 실행하려고 합니다 .

commmand >> /home/user/accumulate_output.log 2>& /home/user/error.log 이 오류 메시지가 나타납니다.

bash: /home/user/error.log :ambiguous redirect

올바른 구문은 무엇입니까?

답변1

2>&1이는 오류 스트림을 stdout으로 리디렉션하는 것을 의미하며 &문자 자체는 그다지 의미가 없습니다. 파일 설명자 수를 제공하기를 기다리고 있지만 파일 이름을 제공하는 것입니다. 번호가 매겨진 파일 설명자가 아닌 파일로 리디렉션하려고 하므로

commmand >> /home/user/accumulate_output.log 2>/home/user/error.log

stdout 및 stderr의 파일 설명자를 참조하여 &1및 "파일 이름"으로 생각할 수 있습니다 . 이제 파일 이름 앞에 아무런 의미가 없다는 &2것을 알게 될 것입니다 .&

요약하면 구문은 리디렉션할 파일 설명자 n>&m또는 n>file어디에 있는지(지정되지 않은 경우 표준 출력을 의미함 )이고, 오른쪽에서는 파일 설명자 또는 이름이 .인 파일 로 리디렉션할 수 있습니다 . 숫자일 수도 있고 파일 설명자가 다음과 같아야 함을 의미합니다.nn=1mfilem-폐쇄리디렉션하는 대신("아무데도" 리디렉션하지 않음)

stdout과 stderr을 동일한 위치로 리디렉션하는 특수 구문도 있지만 그게 전부입니다 &>. 이는 일반 구문의 일부가 아니기 때문에 혼란스러울 뿐입니다. 이는 실제로 두 리디렉션을 동시에 수행하는 지름길입니다.

관련 정보