rm 매뉴얼에서는 그렇지 않은데 아무런 인수 없이 실행할 수 있다고 말하는 이유는 무엇입니까?

rm 매뉴얼에서는 그렇지 않은데 아무런 인수 없이 실행할 수 있다고 말하는 이유는 무엇입니까?

명령 요약은 다음과 같습니다 rm.

rm [OPTION]... [FILE]...

rm이는 옵션이나 매개변수 없이 명령 만 사용할 수 있다는 뜻이 아닌가요 ? 명령을 단독으로 실행 하면
터미널에 다음 오류가 표시됩니다.rm

rm: missing operand
Try 'rm --help' for more information.

왜 이런 일이 일어나는지 말해 줄 수 있는 사람이 있나요?

답변1

rm유틸리티의 표준 프로필을 지정합니다.POSIX 표준에서1&2

rm [-iRr] file...
rm -f [-iRr] [file...]

첫 번째 형식에서는 최소한 하나의 파일 피연산자가 필요하지만 두 번째 형식에서는 필요하지 않습니다.

파일 피연산자를 사용하지 않는 rm -f것은 오류가 아닙니다.

$ rm -f
$ echo "$?"
0

...하지만 별로 효과가 없습니다.

표준에 따르면 이 -f옵션 의 경우 rm유틸리티는 다음을 수행해야 합니다.

확인 메시지를 표시하지 않습니다. 파일 피연산자가 없거나 피연산자가 존재하지 않는 경우 진단 메시지를 작성하거나 종료 상태를 수정하지 마십시오. 이전에 발생한 -i옵션은 무시됩니다.

이는 경로 이름 피연산자 없이 실행될 수 있어야 하며 종료 시 진단 메시지나 0이 아닌 종료 상태가 rm -f발생하지 않음을 확인합니다.rm

이 사실은 여러 파일을 삭제하려는 스크립트에서 매우 유용합니다.

rm -f -- "$@"

"$@"어디에 비어 있거나 존재하지 않는 경로 이름이 포함될 수 있는 경로 이름 목록이 있습니다 .

( rm -f진단 메시지가 있는 경우 여전히 생성되고 0이 아닌 종료 상태로 종료됩니다.권한 문제지정된 파일이 삭제되는 것을 방지합니다. )

그러나 옵션이나 경로 이름 피연산자 없이 유틸리티를 실행하면 오류가 발생합니다.

$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1

rmGNU(위에 표시된 OpenBSD) 및 동일한 유틸리티의 다른 구현에서도 마찬가지이지만 rm정확한 진단 메시지와 0이 아닌 종료 상태는 다를 수 있습니다(예를 들어 Solaris에서는 2이고 macOS에서는 64입니다).

요약하자면, GNU 매뉴얼은 약간 부정확할 수 있습니다. 일부 옵션( 선택 옵션인 ) rm의 경우 경로 이름 피연산자는 선택 사항이기 때문입니다 .-f


1 2016년판 이후 결의문 이후이 오류, 바라보다이전 버전참고용.
2 POSIX는 Unix 시스템과 그 동작 방식을 정의하는 표준입니다. 이 표준은 다음으로 구성됩니다.그룹 열기. 질문 "도 참조하세요.POSIX란 정확히 무엇입니까?".

답변2

기술적으로 개요는 정확하지만 혼란스럽습니다. 다음과 같은 경우에는 파일 이름이 필요하지 않습니다.

rm --help
rm --version

(GNU를 사용하는 경우 rm). 다른 모든 경우에는 파일 이름이 필요합니다.

rm파일 의 다른 버전은 선택 사항이 아닌 것으로 표시됩니다.예를 들어존재하다OpenBSD 맨페이지.

GNU에 대한 보다 정확한 요약은 rm다음 세 가지 변형을 보여줍니다.

rm[옵션...]문서...
rm --help
rm --version

관련 정보