바이너리를 쉘 명령어로 등록하기 (+ 버전 관리, 멀티 패키지)
PATH
- shell에 명령어를 입력하게 되면 환경 변수 `` PATH``에 등록된 경로를 차례로 뒤져가면서 해당 명령어와 일치하는 바이너리가 있는지 찾는다.
- `` /usr/bin``에 위치한 바이너리가 쉘에서 별도의 prefix 없이 명령어로서 사용할 수 있는 것은, 이 경로는 기본으로 `` PATH``에 등록되어 있기 때문
패키지를 수동 설치 하거나 바이너리를 직접 가져온 경우, 이를 명령어로 등록하고 싶다면?
- 해당 바이너리가 위치한 경로를 환경변수 `` PATH``에 추가하는 방법
- PATH 관리가 좀 지저분해질 수 있다.
- 해당 바이너리만 `` /usr/bin``으로 직접 symbolic link하는 방법
- 가능은 하지만 단점이 있음. 버전이 여러 개인 경우.
- 예를 들면 java8, java12나 python2, python3 처럼 버전이 여러 개라면 관리가 난감할 수 있다.
- 버전 관리 도구를 사용하는 방법.
- 추천
이런 경우 버전 관리가 가능한 별도 도구를 사용하는 것이 좋다.
- 자바의 경우 `` jenv``를 사용할 수 있다.
- 하지만 update-alternatives를 쓰는게 더 나아보인다.
- 파이썬은 `` pyenv``를 사용할 수 있다.
- 특정 프로젝트에 패키지를 아예 가두려면 `` virtualenv``를 쓰는게 좋고.
- 둘 다 못쓰는 일반 바이너리라면 리눅스에서 제공하는 `` update-alternatives`` 를 사용하면 된다.
- https://blog.benelog.net/installing-jdk.html#update_alternatives_alternatives
update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_171/bin/java" 1;
update-alternatives --set java /usr/local/java/jdk1.7.0_45/bin/java;
root@ubuntu:/usr/bin# update-alternatives --config java
There is 1 choice for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/local/java/jdk1.8.0_171/bin/java 1 auto mode
* 1 /usr/local/java/jdk1.8.0_171/bin/java 1 manual mode
Press <enter> to keep the current choice[*], or type selection number:
``c /usr/bin/java -> /etc/alternatives/java``로 심볼릭 링크를 생성해준다.
java는 그냥 /usr/libexec/java_home 쓰면 된다
❯ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
19.0.2 (arm64) "Amazon.com Inc." - "Amazon Corretto 19" /Users/user/Library/Java/JavaVirtualMachines/corretto-19.0.2/Contents/Home
17.0.8 (arm64) "Azul Systems, Inc." - "Zulu 17.44.15" /Users/user/Library/Java/JavaVirtualMachines/azul-17.0.8/Contents/Home
1.8.0_382 (arm64) "Azul Systems, Inc." - "Zulu 8.72.0.17" /Users/user/Library/Java/JavaVirtualMachines/azul-1.8.0_382/Contents/Home
/Users/user/Library/Java/JavaVirtualMachines/corretto-19.0.2/Contents/Home
---
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
bash 환경변수 명시 스크립트 불러오는 순서
각 스크립트를 열어보면 `` if 있으면 then 그 스크립트를 실행한다`` 내용이 상단에 적혀있어서,
.bash_profile이 .bashrc를 부르고, .bashrc가 /etc/bashrc를 부르고.. 이런 식이다.
- `` /etc/profile.d/``
- `` /etc/bashrc``
- `` .bashrc`` --- non-login shell에도 적용하려면 여기, 또는 상위 스크립트에 명시해야 한다.
- `` .bash_profile``
'OS > LINUX & UNIX' 카테고리의 다른 글
Shell Script (0) | 2021.03.15 |
---|---|
shell prompt (bash, Oh My Zsh) (0) | 2020.01.10 |
SSH 접속 끊어도 프로세스 돌아가도록 하기 : screen, disown, 백그라운드 작업 (1) | 2017.11.13 |
gcc options (2) | 2017.10.01 |
libc 버전 문제 (0) | 2017.07.23 |