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
먼저 보이면 $PATH
in ~/.bashrc
및 을 설정해야합니다 /.bash_profile
.
답변
pjv가 지적했듯이 실제로 사용해야합니다.
#!/usr/bin/env bash
어디서나 스크립트로 이식 할 수 있습니다. 예를 들어 스크립트를 실행하려고하면
#!/usr/local/bin/bash
대부분의 리눅스 시스템에서는 실패합니다.