얼마 전 '끔찍한 프로그래밍 실수'를 다룬 온라인 스레드를 훑어보다가 소름 돋는 사례 하나를 발견했습니다.
이 커밋에는 아래와 같은 명령어가 담겨 있었습니다:
rm -rf /foo-bar-usr /lib/nvidia-current/xorg/xorg
참고 – 여러분이 이 명령을 그대로 실행했을 때 설명하려는 사고가 발생하지 않도록 경로에 foo-bar-를 추가해 두었습니다. 솔직히 이 명령이 클립보드에만 있어도 불안합니다!
공백 하나가 만든 참사
이 명령을 실행하면 어떻게 될까요? 시스템의 /usr/ 디렉터리 전체가 순식간에 삭제됩니다. 즉, 컴퓨터가 완전히 먹통이 되어버리는 것입니다. 그 원인은 단 하나의 공백입니다.
/usr 뒤에 삽입된 공백 때문에 rm 명령은 잘못 입력된 하나의 경로가 아니라 서로 다른 두 개의 디렉터리를 삭제 대상으로 인식합니다.
만약 이 경로를 따옴표로 감싸 하나의 인자로 전달했다면 이런 참사는 애초에 일어나지 않았을 것입니다.
그럼에도 따옴표를 생략하는 이유와, 꼭 붙여야 하는 이유
대부분의 명령줄 예제에서는 스크립트의 의미를 모호하게 만들거나 가독성을 떨어뜨릴 수 있다는 이유로 따옴표를 붙이지 않습니다. 하지만 명령줄에서 직접 실행하는 것이 아니라 스크립트를 작성할 때, 특히 사용자 입력을 받아야 하는 경우라면(사용자가 실수로 공백을 입력할 수 있습니다. 사용자를 절대 맹신하지 마세요) 예방 차원에서 파일 경로를 반드시 따옴표로 감싸는 습관을 들이는 것이 좋습니다.
소중한 데이터를 잃고 싶은 사람은 없을 겁니다. 더군다나 남의 데이터까지 잃게 되는 최악의 상황은 말할 것도 없겠죠.