OSX Yosemite에서 bash를 버전 4.0으로 실제로 업데이트 할 수 있습니까?
echo $BASH_VERSION
3.2.57(1)-release
이 기사 와이 스레드 는 동일한 질문을 언급하지만 이전 쉘과 나란히 새로운 쉘을 설치합니다. 이전 bash 쉘을 직접 업데이트하는 방법이 있습니까?
OSX Yosemite에서 bash를 버전 4.0으로 실제로 업데이트 할 수 있습니까?
echo $BASH_VERSION
3.2.57(1)-release
이 기사 와이 스레드 는 동일한 질문을 언급하지만 이전 쉘과 나란히 새로운 쉘을 설치합니다. 이전 bash 쉘을 직접 업데이트하는 방법이 있습니까?
답변:
최신 버전은 Apple이 사용할 수없는 GPLv3에 따라 라이센스가 부여되므로 Apple은 Bash를 업데이트하지 않습니다. 그들은 다른 쉘을 대부분 업데이트했습니다. 예를 들어 ZSH는 대부분 최신입니다.
참고 문헌 :
약간의 연구를 한 후에 이것은 주요 문제처럼 보입니다.
사람들이 GPLv3에 따라 소프트웨어가 포함 된 사용자 제품을 배포 할 경우 6 항에서는 해당 소프트웨어를 수정하는 데 필요한 정보를 제공해야합니다. 사용자 제품은 라이센스에 특별히 정의 된 용어입니다. 사용자 제품의 예로는 휴대용 음악 플레이어, 디지털 비디오 레코더 및 홈 보안 시스템이 있습니다.
이를 위해서는 폐쇄 소스 소프트웨어가 필요하며 GPL 부분을 일반인이 수정할 수 있어야하며, 이는 분명히 애플의 문제입니다.
bash
. "Tivoization"절은 bash
Apple TV에서 업데이트 할 수 없지만 실제로 데스크톱 Mac에서는 업데이트 할 수없는 이유 를 설명 할 수 있습니다. 더욱이, "GPL의 일부"는 이미 대중에 의해 수정 될 수 있어야한다. v3은 그것을 바꾸지 않을 것입니다. 내가 믿는 것 것을 특허 GPL v3으로의 절은 GPL v3으로 코드를 만지지 애플을 억제하기에 충분하다.
OSX Yosemite에서 bash를 버전 4.0으로 실제로 업데이트 할 수 있습니까? 예.
터미널에서이 명령을 실행하여 homebrew http://brew.sh/ 를 다운로드 / 설치하십시오 .
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
터미널을 종료했다가 다시 엽니 다. 그런 다음 입력
brew install bash
새 bash의 리터럴 경로로 터미널 gui를 통해 기본 쉘을 변경하십시오 (편집 : 작동하는 CLI 방법을 아직 찾지 못했습니다)
OSX Yosemite에서 Apple이 제공 한 bash 버전 4.0으로 bash 를 실제로 업데이트 할 수 있습니까?
편집 : 아니오. op가 요구하는 방식이 아닙니다. 예를 들어 현재 설치를 교체하여 현재 설치를 업그레이드하십시오. 다른 답변에서 Apple은 라이센스 문제로 인해 bash를 업데이트하지 않았다고 언급되었습니다. 그러나 업데이트 된 별도의 bash 버전을 다운로드하여 기본 쉘로 사용하는 것이 대부분의 통역사에있어 표준 솔루션입니다. 파이썬을 예로 들어 보자. 2.7을 3.5로 업그레이드하지 않고 별도의 버전을 다운로드하고 기본값을 변경하십시오.
sudo chpass -s /usr/local/bin/bash
. 참고 : /usr/local/bin/
매번 환경을 변경할 필요없이 Brew가 업그레이드를 처리 할 수있는 방식으로 symlink를 가리키는 것이 가장 좋습니다 .
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
다음 chsh -s /usr/local/bin/bash
터미널의 기본 쉘 설정합니다
@William이 그의 답변에서 말했듯이 Apple은 GPL 제한으로 인해 bash 4를 제공하지 않습니다. 그러나 bash 4+를 설치 하고 다음을 수행 하여 기본 셸 (터미널 및 iTerm2 포함 )로 만들 수도 있습니다 .
먼저 최신 버전의 bash를 설치하십시오. 여러 가지 방법이 있습니다. 저는 Homebrew를 선호합니다.
brew install bash
.Bash 4는 이제 PATH에서 사용할 수 있습니다 (Homebrew bin이 경로에 있다고 가정). 그러나 아직 기본 쉘 이 아닙니다 . 를 실행하여 위치를 찾을 수 있습니다 which bash
. 제 경우에는입니다 /usr/local/bin/bash
.
PATH에 있으므로 Bash 4 세션을 그냥 시작 bash
하거나 Shebang 을 사용하여 스크립트에서 사용할 수 있습니다 .
예를 들어 특정 bash 인스턴스를 사용합니다.
#!/usr/local/bin/bash
...your script...
이것은 PATH의 첫 번째 bash를 사용합니다.
#!/usr/bin/env bash
...your script...
@ user136952의 답변에 설명 된 단계를 사용하여 Terminal / iTerm2의 특정 프로파일에 대한 bash 경로를 설정할 수도 있습니다.
위에서 언급했듯이 Bash 4를 설치 한 후에도 여전히 기본 셸이 아닙니다. bash를 기본값으로 설정하려면 두 단계를 더 수행해야합니다.
먼저, Bash 4 경로를 /etc/shells
파일에 추가하여 허용 된 로그인 쉘이되도록 하십시오 . / etc / shells에 설명 된 대로이 파일에는 유효한 로그인 쉘 목록이 있습니다. 새로운 bash 경로를 추가하면 /etc/shells
다음과 같습니다.
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash
다음으로 chsh를 사용하여 기본 쉘로 만듭니다. 따라서 해당 사용자의 모든 세션은 해당 셸을 사용합니다. Mac OS X 터미널에서 셸 변경 에서 자세한 내용을 읽을 수 있지만 실제 명령은 매우 간단합니다.
chsh -s /usr/local/bin/bash
이제 새로운 bash는 기본 로그인 쉘입니다. 터미널 또는 iTerm2를 열고 실행 bash --version
하면 새 버전이 표시됩니다. "License GPLv3 +"는 Apple이 macOS와 함께 번들로 제공하지 않는 이유입니다.
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.6.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
sudo chpass -s /usr/local/bin/bash
루트 / 스도에 대해서만 쉘을 변경 합니다. 일반 로그인을 변경하려면을 사용하지 않고 명령을 실행해야합니다 sudo
. 이것은 Active Directory 일 수 있습니다. 잘 모르겠습니다.
#!/usr/local/bin/bash
오두막을 사용하여 조사 #!/usr/bin/env bash
( 설명 ). 스크립트를 시작하는 환경에서 도달 할 수있는 모든 버전의 bash, 즉 which bash
반환되는 모든 스크립트를 사용하여 스크립트를 실행 합니다. 특정 경로를 사용하는보다 이식성이 뛰어난 솔루션입니다. 우리는 다른 사용자가 homebrew를 통해 bash를 설치할 것으로 기대할 수 없습니다.
Homebrew없이 다른 버전의 Bash를 설치할 수 있습니다.
다음 단계를 따르십시오 : https://gist.github.com/samnang/1759336
원하는 bash 버전 다운로드 및 설치 XX (bash-XX)를 원하는 버전으로 바꿉니다. 예 : 4.4
curl -O http://ftp.gnu.org/gnu/bash/bash-X.X.tar.gz tar xzf bash-X.X.tar.gz cd bash-X.X ./configure --prefix=/usr/local && make && sudo make install
합법적 인 쉘 목록에 새 쉘 추가
sudo bash -c "echo /usr/local/bin/bash >> /private/etc/shells"
사용자의 쉘 변경
chsh -s /usr/local/bin/bash
Bash 4 및 / usr / local / bin / bash ...를 확인하십시오.
echo $BASH && echo $BASH_VERSION
bash 명령이 별명을 사용하도록하려면 별명을 추가 할 수 있습니다. ~ / .bash_profile에 배치하십시오
alias bash="/usr/local/bin/bash"
스크립트의 경우 chsh 또는 GUI를 통한 셸 업데이트와 함께 병렬 설치가 실패합니다. 스크립트는 종종 env bash
OS X bash 버전으로 되 돌리는을 사용합니다. 따라서 원하는 것은 bash의 전체 업데이트가 아니라 항상 최신 버전의 bash를 반환하는 병렬 설치 일 수 있습니다 (즉, env
호출 된 경우에도 ).
따라서 이것을 처리하려면 다음을 수행하십시오.
1) 다른 주석 작성자가 게시 한 것처럼 Homebrew를 통해 bash를 설치하십시오.
2) 다른 사용자가 게시 한대로 GUI 또는 chsh 명령을 통해 로그인 쉘을이 새 버전으로 설정하십시오.
3) $ PATH 변수에 /usr/local/bin
앞서 /bin
다음을 추가하여 설정하십시오 (또는 새로운 bash 버전의 경로) ~/.bash_profile
.export PATH=/usr/local/bin:$PATH
.bash_profile
어쨌든 호출하지 않으므로 터미널에서 직접 실행하는 작업에만 영향을 미칩니다.