명령 을 사용했는데 *
다음 오류가 표시되었습니다.
bash: boot: command not found
이 오류는 왜 발생합니까?
답변1
명령줄에 입력한 첫 번째 단어는 셸에서 명령 이름으로 해석됩니다.
쉘은 *
파일 이름 와일드카드 문자를 현재 디렉토리에 표시되는 모든 이름으로 확장합니다. 이름은 사전순으로 정렬됩니다.
현재 있는 디렉토리의 이름이 이름 boot
입니다. 그냥 들어가라는 뜻이다*
해당 특정 디렉토리에서boot
이는 해당 디렉터리의 다른 모든 이름을 명령줄 인수로 사용하여 호출된 명령을 실행하는 것과 같습니다.
boot
시스템에서는 현재 에서 호출되는 명령이 없으므로 $PATH
쉘에서 해당 명령을 찾을 수 없다고 불평합니다.
그게 다야.
내 시스템의 예( zsh
대신 쉘을 실행 bash
하지만 그 점에서는 동일하게 작동함):
% cd /
% ls
altroot bsd bsd.sp home sbin usr
bin bsd.booted dev mnt sys var
boot bsd.rd etc root tmp
% *
zsh: command not found: altroot
just 를 사용할 때 *
쉘은 내가 있는 디렉토리의 파일 이름 글로빙 패턴 확장에서 altroot
이름 altroot
(디렉토리의 이름이 됨)이 먼저 오기 때문에 명명된 명령을 실행하려고 시도합니다.*
파일 이름 글로빙 패턴을 통해 실행할 명령을 선택하는 것은 오류가 발생하기 쉽고 위험하므로 피하는 것이 가장 좋습니다.
어느 정도 관련된 일화로, 나는믿다-i
나는 사용자가 중요한 파일이 포함된 디렉토리에 이름이 지정된 파일을 생성하는 것을 보았습니다 . 그래서 그들은 아마도 다음과 같은 것을 가지고 있을 것입니다.
$ ls -l
total 0
-rw-r--r-- 1 myself wheel 0 Apr 16 18:49 -i
-rw-r--r-- 1 myself wheel 0 Apr 16 18:49 important-file-1.txt
-rw-r--r-- 1 myself wheel 0 Apr 16 18:49 important-file-2.txt
-rw-r--r-- 1 myself wheel 0 Apr 16 18:49 important-file-3.txt
먼저 어떻게 -i
정렬되어 있는지 확인하세요. 즉, rm -rf *
이 디렉터리에서 이 작업을 (잘못) 수행하면 다음과 같은 일이 발생합니다.
$ rm -rf *
remove important-file-1.txt? n
remove important-file-2.txt? n
remove important-file-3.txt? n
즉, -i
이름이 옵션으로 삽입되어 파일을 삭제하기 전에 확인 메시지가 rm -rf
표시됩니다 . rm
그런 다음 그들은 작업을 중단할 기회를 가졌습니다.
이것은 재미있는 작은 트릭이지만 실수로 파일을 삭제하는 문제를 해결하는 올바른 방법은 아닙니다. 올바른 해결책은저것문제는 정기적으로 백업을 수행하는 것입니다.