Mac OS X Yosemite에서 bash를 업데이트하는 방법 $BASH_VERSION Bash version 4.0.33(0)-release… 그러나

bash 스크립팅을 조금 배우려고합니다. 내 오래된 bash 버전 :

Bash version 3.2.53(1)-release...

macbrew x yosemite의 bash를 homebrew로 업데이트했습니다.

brew update
brew install bash

그런 다음 터미널 속성에서 표준 쉘 경로를에서 /bin/bash로 변경 했습니다 /usr/local/bin/bash(이것은 homebrew가 업데이트 된 bash를 설치하는 곳입니다).

그런 다음 결과를 다시 확인했습니다 (모두 좋은 것 같습니다).

$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...

그러나 간단한 bash 스크립트를 작성하려고 할 때 :

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done

결과는 :

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times

대신에:

Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times

동일한 쉘에서 스크립트를 실행하려고 할 때 왜 Bash 버전이 이전 버전으로 다시 변경됩니까 ??? 이것은 단지 나를 놀라게합니다! 누군가 내 문제를 설명해주세요))))



답변

문제는 첫 줄에 있습니다. 당신은 이것을 가지고 있습니다 :

#!/bin/bash

쉘 스크립트가 이전 스크립트와 함께 실행되어야 함을 명시 적으로 나타냅니다 /bin/bash. 당신이 정말로 원하는 것은 이것입니다.

#!/usr/local/bin/bash

새로운 사용 bash에서을 /usr/local/bin.


답변

새로운 bash를 설치하십시오.

brew install bash

이것을 기본 쉘로 만드십시오.

chsh -s /usr/local/bin/bash

스크립트에서 환경을 설정하십시오.

#!/usr/bin/env bash

Using env는 귀하의 Bash를 찾아서 $PATH처음 발견 한 것을 사용합니다. bash을 입력하여 어떤 것을 사용할지 알 수 있습니다 which bash. /bin/bash먼저 보이면 $PATHin ~/.bashrc및 을 설정해야합니다 /.bash_profile.


답변

pjv가 지적했듯이 실제로 사용해야합니다.

#!/usr/bin/env bash

어디서나 스크립트로 이식 할 수 있습니다. 예를 들어 스크립트를 실행하려고하면

#!/usr/local/bin/bash

대부분의 리눅스 시스템에서는 실패합니다.