Mac OS X Yosemite에서 bash를 업데이트하는 방법


25

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 버전이 이전 버전으로 다시 변경됩니까 ??? 이것은 단지 나를 놀라게합니다! 누군가 내 문제를 설명해주세요))))

답변:


17

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

#!/bin/bash

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

#!/usr/local/bin/bash

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


이상한 일이지만 실제로 작동하지 않았습니다. 여전히 동일한 결과 (((그러나 이것이 문제의 일부라고 확신합니다
Drew

이 경로를 다른 곳에 지정해야합니까? 일부 쉘 파일이나 무언가?
Drew

1
아마도 환경은 호출 쉘, 예를 들어 오래된 Bash에 의해 설정됩니까? @Andrew 스크립트를 정확히 어떻게 호출합니까?
slhck December

1
@Andrew, 귀하의 사이트 sh가 의심 됩니다 /bin. brew어쩌면 심볼릭 링크를하지 않았다 bash라고합니다 sh. 당신과 함께 $PATH올바르게 설정, 이런 식으로 시작보십시오 bash script.sh.
BenjiWiebe

8
나중에 참조하기 위해 다음을 사용해야합니다.#!/usr/bin/env bash
pjvandehaar

15

새로운 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.


2
사용할 때 "비표준 쉘"이 출력되면 / etc / shellschsh업데이트 해야합니다 .
Scott Willeke

6

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

#!/usr/bin/env bash

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

#!/usr/local/bin/bash

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.