왜 일부 bash 명령에는 명시적 경로가 필요하고 일부는 그렇지 않은지 이해할 수 없습니다.
명시적 경로가 필요한 명령의 전체 목록이 있습니까?
실제 사례:
chmod +x 2copyQ.tmp.sh ;
./2copyQ.tmp.sh ;
이것은 유효하거나 다음과 같습니다No such file or directory
예가 작동하지 않습니다:
chmod +x 2copyQ.tmp.sh ;
2copyQ.tmp.sh ;
2copyQ.tmp.sh: command not found
답변1
명시적 경로가 필요한 명령의 전체 목록이 있습니까?
짧은 답변: 그러한 목록은 없습니다.
긴 답변:
대부분의 대화형 셸에서 명령은 $PATH
변수를 사용하여 검색됩니다. PATH
실행 파일을 찾기 위한 콜론으로 구분된 디렉터리 목록입니다.
샘플은 PATH
다음과 같습니다.
/home/archemar/bin:/usr/local/bin:/usr/sbin:/usr/bin
(실제로는 PATH
훨씬 더 깁니다)
명령을 내릴 때 foo
,
- 쉘은 존재하지 않는 디렉토리를 자동으로 무시하고
foo
나열된 디렉토리에서 지정된 실행 파일을 왼쪽에서 오른쪽으로 검색합니다.PATH
- 실행 파일이 발견되면
foo
쉘이 이를 실행합니다. - 찾지 못하면
foo: command not found
오류가 발생합니다.
game1/foo
상대 파일 이름( , ./foo
) 또는 절대 파일 이름( ) 을 사용하면 /opt/tomcat/bin/start.sh
쉘은 파일을 찾아 실행합니다(찾을 수 없으면 불평).
쉘이 현재 디렉토리에서 실행 파일을 찾도록 하려면 에 .
(local dir)을 추가하십시오 PATH
.
.:/home/archemar/bin:/usr/local/bin:/usr/sbin:/usr/bin
보안상의 이유로 추가하는 것은 나쁜 습관으로 간주 .
됩니다 .PATH