일부 Linux 명령에는 명시적인 경로가 필요하지만 일부는 그렇지 않습니다.

일부 Linux 명령에는 명시적인 경로가 필요하지만 일부는 그렇지 않습니다.

왜 일부 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,

  1. 쉘은 존재하지 않는 디렉토리를 자동으로 무시하고 foo나열된 디렉토리에서 지정된 실행 파일을 왼쪽에서 오른쪽으로 검색합니다.PATH
  2. 실행 파일이 발견되면 foo쉘이 이를 실행합니다.
  3. 찾지 못하면 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

관련 정보