나는 우분투에 대한 많은 온라인 튜토리얼을 보았고 그 중 일부는 스크립트 시작 부분에서 시스템 변수로 내보내기 =를 사용합니다.
예를 들어:
export JAVA_HOME=/usr/local/java/jdk1.8.0_05
export CATALINA_HOME=/ubuntuland/utils/apache-tomcat-8.0.8
바라보다이 튜토리얼
나는 논리를 이해하려고 노력하고 있습니다. 왜냐하면 그들이 자신의 것을 정의하는 대신 시스템 변수를 사용한다는 것이 나에게는 이해가 되기 때문입니다.
편집하다
작성 시:
echo $JAVA_HOME
셸에서는 서버의 언제든지(다시 시작한 후에도) 모든 셸에서 올바른 콘텐츠를 볼 수 있습니다.
답변1
때로는 무언가를 실행하기 위해 버전을 사용해야 하는 경우도 있습니다. 귀하의 경우 이는 Tomcat 서버를 구동하는 Java 버전이 됩니다. 전역 Java 버전은 시간이 지남에 따라 변경될 수 있으며 버그나 비호환성으로 인해 Tomcat 서버가 중단될 수 있습니다. 따라서 자신만의 Tomcat을 정의하면 JAVA_HOME
이전에 테스트했고 신뢰할 수 있는 Java 버전으로 Tomcat이 시작되는지 확인할 수 있습니다. 또 다른 요점은 여러 인스턴스가 실행 중이고 서로 다른 인스턴스에 대해 서로 다른 인스턴스를 지정해야 한다는 것입니다 CATALINA_HOME
.
내 생각에 가장 좋은 접근 방식은 시스템 전체 구성에 따라 시간이 지남에 따라 변하거나 존재하지 않을 수도 있는 변수에 의존하기보다는 변수를 명시적으로 정의하는 것입니다. 또한 문제를 해결하고 어떤 경로와 바이너리가 사용되는지 확인하기가 더 쉽습니다.
답변2
매뉴얼 bash
에는 이런 말이 있습니다 export
.
export [-fn] [name[=word]] ...
export -p
The supplied names are marked for automatic export to the envi‐
ronment of subsequently executed commands. [...]
이는 변수를 내보낼 때 변수를 내보낸 셸의 모든 하위 프로세스에서 사용할 수 있음을 의미합니다. 표시하려면:
$ foo="bar"
$ bash -c 'echo "$foo"' ## the variable isn't available to the child
$ export foo="bar"
$ bash -c 'echo "$foo"' ## the child also gets the variable
bar
따라서 export
현재 실행 중인 셸뿐만 아니라 모든 프로세스에서 변수를 사용할 수 있도록 하려면 이 변수를 사용하세요.