여러 디렉터리에 설치된 Bash 스크립트 [닫기]

여러 디렉터리에 설치된 Bash 스크립트 [닫기]

rbenv를 처음부터 끝까지 설치하기 위해 bash 스크립트를 작성하려고 합니다. 나는 재미로 Mac을 사용합니다.

하지만 뭔가 작동하지 않습니다. 주로 디렉토리를 변경하고 있지만 하위 쉘에서만 가능합니다.

#!/bin/bash
echo "installing rbenv ruby manager manager"
cd ~
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source .bash_profile

echo "installing ruby build for rbenv"
git clone https://github.com/sstephenson/ruby-build.git
cd ruby-build
sudo ./install.sh

echo "rbenv and ruby-build have been installed, installing ruby now.."
sleep 2

read -p "would you like chronospere to install ruby 1.9.3 [y/n]" RESP
if [ "$RESP" = "y" ]; then
  rbenv install 1.9.3-p327
  rbenv rehash
  rbenv global 1.9.3-p327
  ruby -v
else
  echo "alrigt skipping.. vagrant has rbenv installed you can install ruby it at your leisure "
  echo "hold cmd, and double clck https://github.com/sstephenson/rbenv for more info"
fi

cd ~

그래서 설치하면 효과가 있는 것 같습니다. 하지만 대부분의 코드가 실행되지 않거나 원하는 곳에서 실행되지 않습니다.

vagrant@precise64:/vagrant$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
vagrant@precise64:/vagrant$ rbenv
The program 'rbenv' is currently not installed.  You can install it by typing:
sudo apt-get install rbenv

보시다시피 아무것도 설치되지 않은 것처럼 보입니다. source .bash_profile한번도 일어나지 않은 일

vagrant@precise64:/vagrant$ cd      
vagrant@precise64:~$ cd ~ 
vagrant@precise64:~$ source .bash_profile 

bash_profile을 수동으로 얻은 후,

vagrant@precise64:~$ rbenv
rbenv 0.4.0-45-g060f141
vagrant@precise64:~$ rbenv versions
  * system (set by /home/vagrant/.rbenv/version)
  1.9.3-p327
vagrant@precise64:~$ rbenv global 1.9.3-p327
vagrant@precise64:~$ ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]

보시다시피 코드는 실행 중인 것처럼 보이지만 한 디렉터리에서 다음 디렉터리로 이동하지 않습니다. bash 스크립트에서 이것이 가능한지조차 모르겠습니다. 나는 에서 ~ / (HOME)뒤로 /ruby-build간 다음 ~으로 이동합니다 /vagrant. 단일 bash 스크립트로 이를 달성할 수 있습니까? 터미널을 열고 코드를 한 줄씩 실행하면 100% 작동하기 때문에 이것은 이상합니다.

답변1

가장 직접적인 이유는 @l0b0이 언급한 것입니다. PATH변수를 업데이트해야 합니다.현재의쉘에서는 source .bash_profile(또는 )을 사용하여 . .bash_profile이 작업을 수행 할 수 있습니다. 스크립트를 통해 쉘의 초기화 파일을 업데이트한 후 생성된 다른 쉘은 "즉시" 작동합니다(업데이트된 초기화 파일을 사용하기 때문입니다).

즉, 조만간 끔찍한 난장판에 직면하지 않는 한 아마도 일을 조금 정리하고 싶을 것입니다. 내가 본 주요 문제는 다음과 같습니다.

  1. 가능한 경우 일부 패키지 관리를 사용하십시오. Mac 사용자라면 확인하고 싶을 수도 있습니다.관련 질문슈퍼유저 SE에서. 패키지 관리를 사용하지 않는 것은 일반적으로 나쁜 습관입니다(이 규칙에는 예외가 있지만).

  2. 일자리가 보장 되나요 sudo ...? 홈 디렉토리에 있다고 가정하면 rbenv, 꼭 루트 디렉토리에 설치해야 합니까? 이는 이전 요점과 관련이 있습니다.

  3. 괜찮을 수도 있지만 ~/.rbenv/bin일반적으로 일반적인 효과를 모방하는 것이 더 좋습니다.FHS자신의 디렉토리에( 등을 직접 디렉토리에 넣거나 bin/별도 etc/lib/하위 디렉토리에 넣음)

  4. set -e명시적으로 확인하지 않은 오류 발생 시 스크립트를 중단하기 위해 이를 사용할 수 있습니다. 자세한 내용 help set은 또는 를 참조하세요. 여기서는 첫 번째 후보입니다. 저장소가 이미 존재하는 경우 복제는 실패하지만 스크립트는 이를 자동으로 수락합니다.man bashgit clone

  5. >> ~/.bash_profile쉘의 초기화 파일을 오염시킬 수 있습니다. 이러한 줄이 이미 존재하는지 확인하는 것이 가능하지만 설치가 제대로 작동하려면 이 줄을 수동으로 추가해야 한다는 점을 알려주는 메모를 인쇄하는 것이 실제로 더 유용할 수 있습니다. 특히 스크립트를 다른 사람에게 주기로 결정한 경우에는 더욱 그렇습니다.

관련 정보