OSX에서 bash를 버전 4.0으로 업데이트


80

OSX Yosemite에서 bash를 버전 4.0으로 실제로 업데이트 할 수 있습니까?

echo $BASH_VERSION
3.2.57(1)-release

기사 와이 스레드 는 동일한 질문을 언급하지만 이전 쉘과 나란히 새로운 쉘을 설치합니다. 이전 bash 쉘을 직접 업데이트하는 방법이 있습니까?


3
그렇게 할 필요가 없습니다. 실제로 항상 원본을 유지하는 것이 좋습니다. 동시에 두 개 이상의 bash 버전을 설치할 수 있으며, 기본값으로 원하는 버전을 설정할 수 있습니다
lupincho

본질적으로 Apple의 Software Update는 Shellshock 용 BASH로 업데이트 한 것처럼 시스템에서 BASH 버전을 변경해야합니다. 따라서 Apple에서 업데이트를 제공하지 않으면 OS X의 일부로 설치된 최신 GNU BASH 버전으로 직접 업데이트 할 수있는 방법이 없습니다. 간접적 인 방법은 직접 다운로드하여 설치하고 설치하는 것입니다. 그런 다음 기본 쉘로 설정하십시오. 제공되는 버전을 제거할지 또는 Apple 업데이트 된 버전을 제거할지 여부는 귀하에게 달려 있습니다.
user3439894

답변:


36

최신 버전은 Apple이 사용할 수없는 GPLv3에 따라 라이센스가 부여되므로 Apple은 Bash를 업데이트하지 않습니다. 그들은 다른 쉘을 대부분 업데이트했습니다. 예를 들어 ZSH는 대부분 최신입니다.

참고 문헌 :

약간의 연구를 한 후에 이것은 주요 문제처럼 보입니다.

사람들이 GPLv3에 따라 소프트웨어가 포함 된 사용자 제품을 배포 할 경우 6 항에서는 해당 소프트웨어를 수정하는 데 필요한 정보를 제공해야합니다. 사용자 제품은 라이센스에 특별히 정의 된 용어입니다. 사용자 제품의 예로는 휴대용 음악 플레이어, 디지털 비디오 레코더 및 홈 보안 시스템이 있습니다.

이를 위해서는 폐쇄 소스 소프트웨어가 필요하며 GPL 부분을 일반인이 수정할 수 있어야하며, 이는 분명히 애플의 문제입니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
bmike

5
이 설명은 의미가 없습니다. GPL (v3 또는 기타) 바이너리를 제공한다고해서 나머지 OS를 릴리스 할 필요는 없습니다. OS의 나머지는하지 않는 링크bash. "Tivoization"절은 bashApple TV에서 업데이트 할 수 없지만 실제로 데스크톱 Mac에서는 업데이트 할 수없는 이유 를 설명 할 수 있습니다. 더욱이, "GPL의 일부"는 이미 대중에 의해 수정 될 수 있어야한다. v3은 그것을 바꾸지 않을 것입니다. 내가 믿는 것 것을 특허 GPL v3으로의 절은 GPL v3으로 코드를 만지지 애플을 억제하기에 충분하다.
jamesdlin

왜 애플에게 문제가 될까요? Bash는 이미 오픈 소스입니다 (모든 버전 ≥1.14는 GNU @ ftp.gnu.org/gnu/bash 를 통해 사용 가능 하며 macOS (현재 v3.2)에 포함 된 버전은 Apple @ opensource.apple.com/source/bash 를 통해 사용 가능) )에 관계없이 수정할 수 있습니다.
목소리

@ tjt263 애플이 사용하는 버전 인 GPLv3과 GPLv2의 차이점은 여전히 ​​라이센스하에있다.
William T Froggard

3
Bash3.2는 GPLv2에 따라 라이센스가 부여됩니다. Bash4.x는 GPLv3에 따라 라이센스가 부여됩니다. 그래서 무엇? 당신은 말했다 : "최신 버전은 GPL v3을,에 따라 사용이 허가되기 때문에 애플, 배쉬를 업데이트하지 않습니다 애플은 사용할 수 없습니다 ." 왜 안돼? "그렇지 않으면 비공개 소스 소프트웨어를 사용하려면 GPL의 부분을 일반인수정할 수 있어야하며 , 이는 분명히 애플에게 문제가 될 것 입니다." 왜 문제가 되나요? 그들은 이미 그렇게합니다. 이미 공개적으로 수정할 수 있습니다. 모든 소프트웨어입니다. 특히 FOSS 일 때 사이트의 소스 코드를 원하는 사람에게 제공합니다.
목소리

62

OSX Yosemite에서 bash를 버전 4.0으로 실제로 업데이트 할 수 있습니까? 예.

  1. 터미널에서이 명령을 실행하여 homebrew http://brew.sh/ 를 다운로드 / 설치하십시오 .

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. 터미널을 종료했다가 다시 엽니 다. 그런 다음 입력

    brew install bash
  3. 새 bash의 리터럴 경로로 터미널 gui를 통해 기본 쉘을 변경하십시오 (편집 : 작동하는 CLI 방법을 아직 찾지 못했습니다)

여기에 이미지 설명을 입력하십시오

OSX Yosemite에서 Apple이 제공 한 bash 버전 4.0으로 bash 를 실제로 업데이트 할 수 있습니까?

편집 : 아니오. op가 요구하는 방식이 아닙니다. 예를 들어 현재 설치를 교체하여 현재 설치를 업그레이드하십시오. 다른 답변에서 Apple은 라이센스 문제로 인해 bash를 업데이트하지 않았다고 언급되었습니다. 그러나 업데이트 된 별도의 bash 버전을 다운로드하여 기본 쉘로 사용하는 것이 대부분의 통역사에있어 표준 솔루션입니다. 파이썬을 예로 들어 보자. 2.7을 3.5로 업그레이드하지 않고 별도의 버전을 다운로드하고 기본값을 변경하십시오.


12
다음을 사용하여 CLI를 통해 기본값을 설정할 수 있습니다 sudo chpass -s /usr/local/bin/bash. 참고 : /usr/local/bin/매번 환경을 변경할 필요없이 Brew가 업그레이드를 처리 할 수있는 방식으로 symlink를 가리키는 것이 가장 좋습니다 .
sansSpoon

3
Apple 이외의 쉘로 갈 때의 위험은 무엇입니까?
Bjorks 최고의 팬

5
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'다음 chsh -s /usr/local/bin/bash터미널의 기본 쉘 설정합니다
Abhijit 사카

51

@William이 그의 답변에서 말했듯이 Apple은 GPL 제한으로 인해 bash 4를 제공하지 않습니다. 그러나 bash 4+를 설치 하고 다음을 수행 하여 기본 셸 (터미널 및 iTerm2 포함 )로 만들 수도 있습니다 .

Homebrew를 통해 Bash 4 설치

먼저 최신 버전의 bash를 설치하십시오. 여러 가지 방법이 있습니다. 저는 Homebrew를 선호합니다.

  • http://brew.sh에 설명 된대로 Homebrew를 설치하십시오 .
  • 를 사용하여 bash를 설치하십시오 brew install bash.

Bash 4는 이제 PATH에서 사용할 수 있습니다 (Homebrew bin이 경로에 있다고 가정). 그러나 아직 기본 쉘 이 아닙니다 . 를 실행하여 위치를 찾을 수 있습니다 which bash. 제 경우에는입니다 /usr/local/bin/bash.

배쉬 4 사용하기

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 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>

2
그가 링크 한 기사 / 스레드를 기반으로 나는 그가 나란히 말하지 않음으로써 실제로 "기본이 아님"을 의미한다고 생각합니다. 내 대답은 4를 기본값으로 설정하므로 3은 더 이상 표시되지 않습니다. 오래된 배쉬가 여전히 디스크 공간을 차지한다는 사실은 큰 문제가되지 않습니다.
studgeek

1
나 +1 예, OP는 이것을 원하지 않지만 질문은 커뮤니티에 속한 것이며 다른 사람들에게 도움이된다면 훌륭합니다. OP가 선택한 답변으로 확인되지 않을 수도 있지만 나쁜 답변은 아닙니다.
bmike

3
High Sierra에서는 sudo chpass -s /usr/local/bin/bash루트 / 스도에 대해서만 쉘을 변경 합니다. 일반 로그인을 변경하려면을 사용하지 않고 명령을 실행해야합니다 sudo. 이것은 Active Directory 일 수 있습니다. 잘 모르겠습니다.
Bradd Szonye 21:29에

1
대신에 사용하는 #!/usr/local/bin/bash오두막을 사용하여 조사 #!/usr/bin/env bash( 설명 ). 스크립트를 시작하는 환경에서 도달 할 수있는 모든 버전의 bash, 즉 which bash반환되는 모든 스크립트를 사용하여 스크립트를 실행 합니다. 특정 경로를 사용하는보다 이식성이 뛰어난 솔루션입니다. 우리는 다른 사용자가 homebrew를 통해 bash를 설치할 것으로 기대할 수 없습니다.
Illya Moskvin

1
@IllyaMoskvin, 명시 적으로 사용하는 방법을 보여주기 위해 원래 특정 경로를 사용했습니다. 예제를 모두 업데이트했습니다.
studgeek

0

Homebrew없이 다른 버전의 Bash를 설치할 수 있습니다.

  • GNU Bash로 이동
  • 원하는 버전을 다운로드하십시오 ( here )
  • 다음 단계를 따르십시오 : 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"

-1

스크립트의 경우 chsh 또는 GUI를 통한 셸 업데이트와 함께 병렬 설치가 실패합니다. 스크립트는 종종 env bashOS 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 버전 3을 예상하는 스크립트를 깨뜨릴 것입니다-예를 들어 Apple에서 제공 한 스크립트
-sde

정당한 포인트. 한동안 이런 식으로 실행되었으며 문제가 없습니다. 어쩌면 애플은 스크립트의 전체 경로를 제공하거나 그냥 걸림돌이되지 않았을 것입니다. 쉘에서가 아닌 애플 시스템 레벨 스크립트의 경우 .bash_profile어쨌든 호출하지 않으므로 터미널에서 직접 실행하는 작업에만 영향을 미칩니다.
cwingrav

2
@ Mark v ≥4.x가 v ≤3.x로 작성된 스크립트를 깨뜨릴 인스턴스를 생각할 수 없습니다. 너는 할수 있니?
목소리

-1

2019 :이 게시물 처럼 간단

$ brew install bash
$ sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
$ chsh -s /usr/local/bin/bash

새로운 터미널을 탭하고 즐기십시오!


1
설명없이 누가 내 대답에 투표 했습니까?
Feuda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.