`rm`을 실행할 때 `--`를 체계적으로 사용해야 합니까?

`rm`을 실행할 때 `--`를 체계적으로 사용해야 합니까?

rm 및 권장 사용법에 대한 질문--

두 개의 파일 -ixx. 내가 그들을 제거하려고하면

$ rm *

나는 얻다:

rm: remove regular file `xx'? n

그리고 에서 설명했듯이"-"처럼 이름이 하이픈으로만 보이는 파일을 Linux에서 어떻게 제거합니까?이 문제를 해결하는 방법은 다음과 같습니다.

$ rm -- *

분명히 문제는 이름이 불려지 -rf거나 유사한 경우 훨씬 더 악화될 수 있습니다.

그래서 내 질문은 다음과 같습니다

불쾌한 놀라움이나 공격을 피하기 위해 확장 가능한 명령보다 체계적으로 명령을 --사용해야 합니까 ?rm

제가 이것을 묻는 이유는 얼마 전에 이 rm문제를 배웠다가 잊어버리고 최근까지 팀원이 다시 가져왔기 때문입니다. 그러나 나는 그런 의미에서 어떤 권장 사항도 본 적이 없으며 너무 위험하므로 더 많이 제시해야 하는지 궁금합니다. (아마도 다른 명령도) --사용할 때마다 일종의 스크립팅 및 콘솔 패턴을 사용해야 합니까 ?rm

답변1

완벽한 세상에서는 그렇습니다. 체계적으로 --. 그러나 우리 모두는 rm체계적으로 를 입력하지 않고 명령을 사용하는 방법을 배웠으며 --, 이를 입력하려면 세 번의 추가 키 입력이 필요하므로 그런 일이 발생하는 것을 볼 수 없습니다. 게다가 --옵션을 종료하는 관례가 항상 존재하는 것은 아닙니다(이것이 많은 사람들이 를 사용하는 방법을 배웠을 때 이에 대해 배우지 않은 이유입니다 rm).

즉, rm쉘 스크립트에서 (및 기타 명령)을 사용할 때는 항상 방어적으로 프로그래밍해야 합니다. 예를 들면 다음과 같습니다.

rm "$1"    # Remove the file named in the first command line argument

안전하지 않으며 이어야 합니다 rm -- "$1". 하지만,

rm "/var/spool/foo/$thatfile"

의 내용으로 인해 인수가 잘못 해석 $thatfile될 수 없으므로 안전합니다.rm

특정 예( )에서는 일반적으로 안전한 해결 방법으로 rm *사용합니다 .rm ./*

관련 정보