답변:
noclobber
기본적으로 설정되지 않은 이유 는 전통입니다. 사용자 인터페이스 디자인과 관련하여 "이 새로운 파일 만들기"를 쉽게 수행하고 추가 장애물을 더 위험한 조치로 "새 파일을 만들거나 기존 파일을 덮어 쓰는"것이 좋습니다. 따라서 새 파일을 만들고 기존 파일을 덮어 쓰는 noclobber
것이 좋습니다. 그리고 수십 년 후에 셸을 디자인 한 경우에는 기본값 일 수 있습니다.>
>|
대화식 쉘 시작 파일 ( .bashrc
또는 .zshrc
) 에서 다음을 사용하는 것이 좋습니다 .
set -o noclobber
alias cp='cp -i'
alias mv='mv -i'
각각의 경우 (리디렉션, 복사, 이동) 목표는 기존 데이터를 지우는 것이 작업의 주요 목표가 아니더라도 오퍼레이션이 기존 데이터를 지우는 부작용이있을 수있는 경우 추가 장애물을 추가하는 것입니다. rm -i
데이터를 지우는 것이의 주요 목표이므로이 목록에 넣지 않습니다 rm
.
참고를 수행 noclobber
하고 -i
있습니다 안전망 . 그들이 트리거 하면 뭔가 잘못한 것 입니다. 따라서 덮어 쓰는 내용을 확인하지 않는 변명으로 사용하지 마십시오! 요점은 출력 파일이 존재하지 않는지 확인해야한다는 것입니다. 당신이 이야기하는 경우 file exists: foo
또는 overwrite 'foo'?
, 당신이 실수를하고 나쁜 기분이 더 조심해야 의미합니다. 특히, y
덮어 쓸 것인지 묻는 메시지가 표시 되는 습관을 들지 마십시오 (아마도 별칭은이어야 alias cp='yes n | cp -i' mv='yes n | mv -i'
하지만 Ctrl+ C를 누르면 출력이 더 좋아집니다) : 덮어 쓰거나 명령을 취소하거나 출력을 이동하거나 제거하려는 경우 파일을 열고 명령을 다시 실행하십시오.
언젠가는 구성이없는 시스템을 사용하고 있고 보호 기능이 없기 때문에 데이터를 잃어 버리기 때문에 이러한 안전을 유발하는 습관을 들이지 않는 것이 중요합니다. 거기에.
noclobber
대화식 쉘에 대해서만 설정 .bashrc
되거나 대화식 쉘에 .zshrc
의해서만 읽 힙니다. 물론 스크립트에 영향을 줄 수있는 방식으로 쉘 옵션을 변경해서는 안됩니다. 스크립트를 손상시킬 수 있기 때문입니다.
rm
옵션을 가지고 -I
내가 사용하는 것이 좋습니다 : "프롬프트 번 개 이상의 파일을 제거하거나 반복적으로 제거 할 때 이전; 이하 침해 -i
, 여전히 대부분의 실수에 대한 보호 기능을 제공하면서"
-i
그들에게 기본 인자로하는 것은 좋은 생각이지만, 그것을 적용해야 다른 별명 이름 이 아닌 원본은 (예를 들어 나는 항상 넣어 alias copy="cp -i"
및 alias move="mv -i"
내 .bashrc에에). 왜? 실패 모드로 인해. cp / mv 별칭이없는 컴퓨터 또는 다른 사용자를 사용하면 어떻게됩니까? 파일이 의도하지 않게 덮어 써질 수 있습니다 (아마도 감지되지 않았습니다!). 별명 복사 / 이동 : 해당 쉘이 명령을 인식하지 못한다고 불평합니다.
-i
cp 및 mv에 대한 인수 를 사용하도록 기본 설정하는 조언 은 훌륭하지만 cp 및 mv 이름을 재사용하는 조언은 끔찍합니다. 답을 다운 투표해야한다는 것은 나쁘다. 다른 별칭 이름을 사용하도록 변경하면 투표권이 부여됩니다.
alias RM='command rm'
을 사용하면 zsh가 rm
별명 대신 외부 명령을 사용하도록 지시 할 수 있습니다 . 그렇게 --interactive=never
하면 이전 을 대체 할 필요가 없습니다 -i
.
설정 noclobber
에서 쉘 옵션을 ~/.bashrc
(위해 bash
) 또는 ~/.zshrc
(또는 더 정확하게 $ZDOTDIR/.zshrc
, 대한 것은 zsh
) 대화 형 쉘 세션에서 활성화됩니다.
비 대화식 쉘 (스크립트)은이 파일을 읽지 않습니다.
쉘 옵션은 일반적으로 상위 쉘에서 상속되지 않습니다.
이는 스크립트가 명시 적으로 해당 파일을 소스하지 않는 한 기존 스크립트의 동작을 수정하지 않고 해당 파일에서 옵션을 설정할 수 있음을 의미합니다.
내가 볼 수있는 유일한 단점은 적어도 처음에는 옵션을 설정했다는 것을 반복해서 잊어 버린다는 것입니다. 그 후, 모든 사물의 이러한 종류의, 당신은 습관적으로 사용을 시작합니다 >|
심지어 당신이 실제로 단지에 대한 별칭을 가진 사람과 같은 파일을 (소지품하지 않을 수 있습니다 경우에 rm
, cp
그리고 mv
과 -i
옵션이 항상 설정, 결국 항상 사용하기 시작 -f
명령 행에서).
bash
하는 경우, 옵션은 상속 $SHELLOPTS
( $BASHOPTS
에 대한 shopt
것), 환경 (당신은 이성의 이런 종류 불구하고 싶지 일반적으로 것없는 무엇인가)에 있습니다.
단점은 noclobber
, 당신이 활동에 익숙해지면 언젠가는 시스템이 작동 하지 않는 시스템을 사용 하고 잠재적으로 위험한 명령을 실행하여 noclobber
당신을 구할 것을 기대하고 ... 그렇지 않을 것이라는 점입니다. 그런 다음 먼저 확인을 요청한다고 가정하여 파괴 한 데이터를 복구하기위한 충분한 백업이 있기를 바랍니다.
rm *
...