이 명령은 무엇을 의미합니까? (IO 리디렉션 문제) [닫음]

이 명령은 무엇을 의미합니까? (IO 리디렉션 문제) [닫음]

이 명령이 무엇을 하는지 알아내려고 노력 중입니다.

rm OUTPUT/* >> log_${ENV} 2>&1

답변1

폴더 rm OUTPUT/*의 모든 파일을 삭제합니다 OUTPUT. >>명령의 출력을 이라는 파일에 추가합니다 log_${ENV}. 이는 일반적으로 stdout의 메시지만 리디렉션합니다( -v인수 없이 rm은 stdout에 아무것도 쓰지 않아야 합니다).

스트림 2(rm이 오류 메시지를 쓰는 stderr)를 스트림 1(stdout)로 리디렉션하여 2>&1파일로 리디렉션합니다.

따라서 이 명령은 파일을 삭제하고 로그 파일(있는 경우)에 오류를 기록합니다.

답변2

이 명령은 다음과 같습니다.

rm OUTPUT/* 2>>log_${ENV}

에서와 같이다른 질문, 중괄호는 여기서 특별한 작업을 수행하지 않습니다. 내 대답도 참조하십시오 ENV.

이 명령은 OUTPUT/*일치하는 모든 콘텐츠를 삭제합니다. 오류가 있으면 지정된 출력 파일에 추가됩니다.

쉘 및 쉘 옵션 세트에 따라 패턴 은 OUTPUT/*디렉토리의 모든 이름 외에도 OUTPUT숨겨진 파일 및 디렉토리의 이름과 일치할 수도 있고 일치하지 않을 수도 있습니다 .

rm유틸리티는 표준 출력에 어떤 출력도 생성하지 않습니다(이것이 위에 설명된 대로 명령을 재정의할 수 있는 이유입니다). 그러나 존재하지 않는 파일을 삭제하거나 현재 사용자에게 삭제 권한이 없는 파일을 삭제할 때 오류가 발생할 수 있습니다. ( 없이) 디렉토리를 삭제하려고 시도합니다 -r. 이러한 오류 메시지는 해당 파일에 추가됩니다. 쉘이 다시 쓰기보다는 추가를 위해 출력 파일을 열도록 하는 것은 >>(대신 ) 을 사용하는 것입니다 .>

원래 명령에서 >>log_${ENV} 2>&1쉘은 추가할 파일을 열고 rm유틸리티의 표준 출력 스트림을 파일에 보내도록 지시됩니다. 그런 다음 쉘은 2>&1이 비트를 통해 표준 오류 스트림을 동일한 위치로 보냅니다. 숫자 1및 는 2각각 표준 출력 스트림과 표준 오류 스트림을 나타냅니다. 숫자가 사용되지 않으면 표준 출력 스트림을 나타냅니다.

답변3

rm OUTPUT/*

OUTPUT 폴더의 모든 파일 삭제

>> log_${ENV}

파일에 출력 추가log_${ENV}

2>&1

STDERR을 STDOUT으로 리디렉션

인용하다:[1]

관련 정보