스크립트에서 영구 환경 변수를 설정하는 올바른 방법

스크립트에서 영구 환경 변수를 설정하는 올바른 방법

내 애플리케이션 프레임워크에 대한 매우 간단한 설치 프로세스를 수행하고 싶습니다. 모든 것이 잘 작동하지만 두 개의 환경 변수를 설정하고 싶습니다. 변수를 업데이트 PATH하고 설정하고 싶습니다 HOME.

상위 프로세스에 var를 설정할 수 없다는 것을 알고 있는데 어떻게 해야 합니까? 나는 사용자에게 실행을 요청하고 싶지 않고 source foo, 사용자가 foo install작업을 실행하고 완료할 수 있기를 원합니다.

물론 방법은 없나요?

편집: 죄송합니다. 실제 의미가 아니라 변수를 HOME의미했습니다 MY_FRAMEWORK_HOME!

답변1

일반적으로 변수는 $HOME사용자가 다루어야 하는 것이 아닙니다. 사용자가 갑자기 다른 홈 디렉토리를 갖는 것을 원하지 않습니다! (이렇게 하려면 그가 설정한 홈 디렉토리를 편집해야 합니다 . 물론 권한이 /etc/passwd필요합니다 .)root

이것은 $PATH또 다른 것이며 그의 ~/.bashrc또는 에 설정되어야 합니다 ~/.bash_profile. 어떤 매개변수를 사용해야 하는지에 대한 다양한 의견이 있지만 여기서는 이에 대해 논의하지 않겠습니다.

/var/myapp/bin사용자의 경로에 추가하고 싶다고 가정해 보겠습니다 . 다음 줄을 추가하면 됩니다.

export PATH="$PATH:/var/myapp/bin"

~/.bashrc이미 존재하는 행을 추가하지 않고 이를 수행하는 좋은 방법에 대해 설명합니다 .스택 vi교환:

ex -sc '$a
export PATH="$PATH:/var/myapp/bin"
.
$-,$!uniq
x' ~/.bashrc

이 방법으로 두 개 이상의 행을 추가하면 이미 존재하는 경우 추가를 방지하기 위한 동일한 안전 검사가 작동하지 않습니다. 이를 위해서는 다른 논리가 필요합니다.


또한 다른 작업 과정을 고려할 수도 있습니다. /usr/local/bin일반적으로 이미 $PATH.

/var/myapp/bin따라서 위의 예에서와 같이 사용자의 PATH에 추가한다고 가정해 보겠습니다 . 처음에 이 작업을 수행하려는 이유는 /var/myapp/bin사용자가 명령줄에서 실행할 수 있는 명령(셸 스크립트 또는 바이너리, 중요하지 않음)이 있기 때문입니다. 이러한 명령은 myapp_command및 이라고 가정합니다 myapp_othercommand.

다음과 같이 심볼릭 링크를 생성하여 PATH에서 사용할 수 있도록 할 수 있습니다.

ln -s /var/myapp/bin/myapp_command /usr/local/bin/myapp_command
ln -s /var/myapp/bin/myapp_othercommand /usr/local/bin/myapp_othercommand

첫 번째 매개변수 ln -s는 TARGET이고, 두 번째 매개변수는 대상을 가리키는 생성하려는 LINK의 이름입니다. (자세한 내용은 를 참조하세요 man ln.)

답변2

오직출구변하기 쉬운:

export NAME1="value1"
export NAME2="value2"
./my.install

편집: 이 작업은 다음 셸(내가 알고 있는)을 통해 수행할 수 있습니다.

  • 스프린트
  • 세게 때리다
  • 켄시하
  • ZTE

편집 2: my.install로 이동하여 my.install.real다음이라는 새 파일을 만들었습니다 my.install.

export HOME='SAMPLE VALUE'
export PATH='SAMPLE VALUE'
./my.install.real
unset HOME
unset PATH

관련 정보