중복된 프로그램 이름 처리 bash

중복된 프로그램 이름 처리 bash

나는 알고 싶다.$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 $PATHshow 인 경우 /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_profilePATH정의가 적용됩니다(로그아웃했다가 로그인하거나 터미널 에뮬레이터를 다시 시작).

$ 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 순서로 발견된 첫 번째 실행 파일입니다.

관련 정보