이 명령이 무엇을 하는지 알아내려고 노력 중입니다.
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]