나는 알고 싶다.$PATH
종속기입. 여러분 모두는 믿음의 도약에 저와 함께해야 합니다. 하지만 여기 있습니다.
Java 실행 파일이 있지만 /usr/bin/java
이 버전이 매우 오래되고 구식이라고 가정해 보겠습니다. 안타깝게도 저희는 접근 권한이 없어서 su
교체할 수 없습니다. 그러나 현재 버전의 JRE/JDK를 로컬로 다운로드하고 최신 버전을 가리킬 수 있습니다. 내 질문은 이름이 같지만 두 개 이상의 실행 파일이 있는 상황을 bash가 어떻게 처리하는가입니다.다른장소? bash는 우리가 콘솔에 무언가를 입력할 때 java
어떤 것을 실행할지 어떻게든 선택합니까 ? /usr/bin
다른 실행 파일이 많이 필요하다고 가정하면 $PATH
이와 같은 실행 파일을 어떻게 찾을 수 있습니까?
이상적으로는 입력할 때 java -version
다음을 확인해야 합니다.
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
바꾸다
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) Client VM(build 24.45-b08, mixed mode, sharing)
나는 이 질문이 이전에 요청된 적이 있으며 이와 관련된 전문 용어가 있다고 확신합니다. SE, SO 및 일부 포럼을 탐색했지만 결정적인 내용을 찾지 못했습니다.
답변1
검색 $PATH
은 순서대로 진행됩니다. 예를 들어, echo $PATH
show 인 경우 /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
각 디렉토리는 주어진 명령에 대해 순차적으로 검색됩니다(명령이 별칭이나 내장 쉘이 아니라고 가정).
사용자별로 특정 바이너리를 재정의하려는 경우(또는 자신 외에 다른 사용자를 재정의할 권한이 없는 경우) bin
홈 디렉터리에 디렉터리를 만든 다음접두사이 디렉터리의 PATH 변수입니다.
이와 같이:
$ cd ~
$ pwd
/home/joe
$ mkdir bin
$ echo "$PATH"
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
$ echo 'export PATH="$HOME/bin:$PATH"' >> .bash_profile
그런 다음 source .bash_profile
새 PATH
정의가 적용됩니다(로그아웃했다가 로그인하거나 터미널 에뮬레이터를 다시 시작).
$ source .bash_profile
$ echo "$PATH"
/home/joe/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
이제 삽입한 모든 실행 파일이 /home/joe/bin/
시스템 바이너리 및 실행 파일보다 우선합니다.
당신이하다시스템 액세스 및 재정의가 모든 사용자에 대해 작동해야 하는 경우 재정의 실행 파일을 배치하는 데 선호되는 위치는 /usr/local/bin
이 목적으로 사용됩니다. 사실 /usr/local/bin
그럴 때가 많다.이미첫 번째 디렉터리에서는 $PATH
이를 구체적으로 허용합니다.
답변2
Bash(실제로는 모든 쉘)가 실행됩니다.첫 번째지정된 이름의 실행 파일을 지정된 순서대로 검색하여 찾습니다.$경로환경에서.
또는 간단하게: $PATH 순서로 발견된 첫 번째 실행 파일입니다.