เป็นไปได้หรือไม่ที่จะอัปเดต bash เป็นเวอร์ชัน 4.0 ใน OSX Yosemite
echo $BASH_VERSION
3.2.57(1)-release
นี้บทความนี้และด้ายอ้างถึงคำถามเดียวกัน แต่พวกเขาติดตั้งเปลือกใหม่เคียงข้างกับคนเก่า มีวิธีอัปเดตเชลล์ bash เก่าโดยตรงหรือไม่
เป็นไปได้หรือไม่ที่จะอัปเดต bash เป็นเวอร์ชัน 4.0 ใน OSX Yosemite
echo $BASH_VERSION
3.2.57(1)-release
นี้บทความนี้และด้ายอ้างถึงคำถามเดียวกัน แต่พวกเขาติดตั้งเปลือกใหม่เคียงข้างกับคนเก่า มีวิธีอัปเดตเชลล์ bash เก่าโดยตรงหรือไม่
คำตอบ:
Apple จะไม่อัปเดต Bash เนื่องจากเวอร์ชันล่าสุดได้รับลิขสิทธิ์ภายใต้ GPLv3 ซึ่ง Apple ไม่สามารถใช้ได้ พวกเขาได้อัพเดทเชลล์ส่วนใหญ่แล้ว ตัวอย่างเช่น ZSH ส่วนใหญ่เป็นข้อมูลล่าสุด
อ้างอิง:
หลังจากการวิจัยเล็กน้อยดูเหมือนว่าจะเป็นปัญหาหลัก:
เมื่อผู้คนแจกจ่ายผลิตภัณฑ์ของผู้ใช้ที่มีซอฟต์แวร์ภายใต้ GPLv3 ส่วนที่ 6 กำหนดว่าพวกเขาจะต้องให้ข้อมูลที่จำเป็นสำหรับการแก้ไขซอฟต์แวร์นั้นแก่คุณ ผลิตภัณฑ์ของผู้ใช้เป็นคำที่กำหนดไว้เป็นพิเศษในใบอนุญาต ตัวอย่างของผลิตภัณฑ์ของผู้ใช้ ได้แก่ เครื่องเล่นเพลงพกพาเครื่องบันทึกวิดีโอดิจิตอลและระบบรักษาความปลอดภัยภายในบ้าน
สิ่งนี้จะต้องมีซอฟต์แวร์ที่เป็นแหล่งปิดมิฉะนั้นต้องมีส่วนของ GPL ที่สามารถแก้ไขได้โดยสาธารณะซึ่งเห็นได้ชัดว่าจะเป็นปัญหาสำหรับ Apple
bash
ไปยัง ประโยค "Tivoization" อาจอธิบายได้ว่าทำไมbash
ไม่สามารถอัพเดทบน Apple TV ได้ แต่ไม่ใช่บนเดสก์ท็อป Mac นอกจากนี้ "GPL'd ส่วน" จะต้องได้รับการแก้ไขโดยสาธารณะ v3 จะไม่เปลี่ยนแปลงสิ่งนั้น ฉันเชื่อว่าคำสั่งสิทธิบัตรของ GPL v3 นั้นเพียงพอที่จะป้องกันไม่ให้ Apple แตะรหัส GPL v3
เป็นไปได้หรือไม่ที่จะอัปเดต bash เป็นเวอร์ชัน 4.0 ใน OSX Yosemite ใช่.
ดาวน์โหลด / ติดตั้ง homebrew http://brew.sh/ โดยใช้คำสั่งนี้ในเทอร์มินัล
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
ปิดและเปิด Terminal ของคุณใหม่ จากนั้นพิมพ์
brew install bash
เปลี่ยนเชลล์เริ่มต้นผ่านเทอร์มินัล gui ด้วยพา ธ ตัวอักษรของ bash ใหม่ของคุณ (แก้ไข: ฉันยังไม่พบวิธี CLI ที่ใช้งานได้)
เป็นไปได้หรือไม่ที่จะอัปเดต bash เป็นApple ที่จัดเตรียม bashเวอร์ชัน 4.0 ใน OSX Yosemite
แก้ไข: ไม่ไม่ทาง op ถาม. เช่นอัพเกรดการติดตั้งปัจจุบันโดยวิธีการแทนที่ตัวเอง มีการบันทึกไว้ในคำตอบอื่น ๆ ที่ Apple ยังไม่ได้ปรับปรุงทุบตีเนื่องจากปัญหาการออกใบอนุญาต อย่างไรก็ตามการดาวน์โหลดเวอร์ชันทุบตีที่อัปเดตและแยกต่างหากและใช้เป็นเชลล์เริ่มต้นของคุณคือโซลูชันที่เป็นที่ยอมรับสำหรับนักแปลส่วนใหญ่ ใช้ไพ ธ อนเป็นตัวอย่าง คุณไม่ได้อัพเกรด 2.7 เป็น 3.5 คุณดาวน์โหลดเวอร์ชันแยกต่างหากและเปลี่ยนค่าเริ่มต้น
sudo chpass -s /usr/local/bin/bash
กับ: หมายเหตุ: เป็นการดีที่สุดที่จะชี้ไปที่ symlink ใน/usr/local/bin/
ลักษณะที่ Brew สามารถจัดการกับการอัพเกรดได้โดยไม่ต้องเปลี่ยนสภาพแวดล้อมของคุณในแต่ละครั้ง
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
จากนั้นchsh -s /usr/local/bin/bash
จะตั้งค่าเปลือกเริ่มต้นสำหรับเทอร์มินัล
ตามที่ @William กล่าวในคำตอบของเขา Apple ไม่ได้จัดเตรียม bash 4 เนื่องจากข้อ จำกัด ของ GPL คุณสามารถติดตั้ง bash 4+ และยังสามารถทำให้มันเป็นเชลล์เริ่มต้นของคุณ (รวมถึง Terminal และiTerm2 ) โดยทำดังต่อไปนี้
ก่อนอื่นให้ติดตั้ง bash เวอร์ชันที่ใหม่กว่า มีหลายวิธีในการทำเช่นนั้นฉันชอบ Homebrew
ตอนนี้ Bash 4 พร้อมใช้งานบน PATH ของคุณแล้ว (สมมติว่า Homebrew bin อยู่บนเส้นทางของคุณ) อย่างไรก็ตามมันยังไม่เป็นเชลล์เริ่มต้นของคุณ which bash
คุณสามารถค้นหาที่เป็นอยู่โดยการทำงาน /usr/local/bin/bash
ในกรณีของฉันมันอยู่ที่
เพราะมันอยู่บนเส้นทางของคุณคุณสามารถเริ่มทุบตี 4 เซสชั่นที่มีเพียงbash
หรือสามารถนำมาใช้ในสคริปต์โดยใช้shebang
ตัวอย่างเช่นนี้จะใช้อินสแตนซ์ทุบตีที่เฉพาะเจาะจง
#!/usr/local/bin/bash
...your script...
นี่จะใช้ bash แรกบน PATH
#!/usr/bin/env bash
...your script...
คุณสามารถตั้งค่า bash path สำหรับโปรไฟล์เฉพาะใน Terminal / iTerm2 โดยใช้ขั้นตอนที่อธิบายไว้ในคำตอบของ @ user136952
ดังกล่าวข้างต้นหลังจากติดตั้ง Bash 4 ยังคงไม่ใช่เปลือกเริ่มต้น หากต้องการทุบตีค่าเริ่มต้นคุณต้องทำสองขั้นตอนเพิ่มเติม
ขั้นแรกให้เพิ่มพา ธ Bash 4 ลงใน/etc/shells
ไฟล์ของคุณเพื่อให้เป็นเชลล์ล็อกอินที่อนุญาต ดังที่อธิบายไว้ใน/ etc / shellsไฟล์นี้มีรายการเชลล์ล็อกอินที่ถูกต้อง หลังจากเพิ่มเส้นทางทุบตีใหม่ของฉัน/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 เพื่อทำให้มันเป็นเปลือกเริ่มต้นของคุณ ดังนั้นเซสชันใด ๆ สำหรับผู้ใช้นั้นจะใช้เชลล์นั้น คุณสามารถอ่านเพิ่มเติมเกี่ยวกับสิ่งนี้ได้ในChange the Shell ใน Mac OS X Terminalแต่คำสั่งจริงนั้นตรงไปตรงมามาก
chsh -s /usr/local/bin/bash
ตอนนี้ทุบตีใหม่คือเปลือกเข้าสู่ระบบเริ่มต้นของเรา หากคุณเปิด Terminal หรือ iTerm2 และเรียกใช้bash --version
คุณจะเห็นเวอร์ชั่นใหม่ จดบันทึก "สิทธิ์การใช้งาน 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
เปลี่ยน shell ของฉันเป็น root / sudo เท่านั้น sudo
การเปลี่ยนเพื่อเข้าสู่ระบบปกติของฉันฉันต้องเรียกใช้คำสั่งโดยไม่ต้อง นี่อาจเป็นสิ่ง Active Directory ฉันไม่แน่ใจ.
#!/usr/local/bin/bash
Shebang ให้ดูที่การใช้#!/usr/bin/env bash
( คำอธิบาย ) นี้จะเรียกใช้สคริปต์กับสิ่งที่รุ่นของทุบตีสามารถเข้าถึงได้จากสภาพแวดล้อมที่เปิดตัวสคริปต์คือสิ่งที่which bash
ผลตอบแทน มันเป็นโซลูชันแบบพกพาที่ใช้เส้นทางเฉพาะ เราไม่สามารถคาดหวังให้ผู้ใช้รายอื่นติดตั้ง bash ผ่าน homebrew
คุณสามารถติดตั้ง Bash เวอร์ชันอื่นโดยไม่ใช้ homebrew
และทำตามขั้นตอนที่นี่: https://gist.github.com/samnang/1759336
ดาวน์โหลดและติดตั้งเวอร์ชั่นทุบตีที่คุณต้องการแทนที่ 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 (เช่นแม้ว่าenv
จะถูกเรียกใช้)
ดังนั้นเพื่อจัดการกับสิ่งนี้:
1) ติดตั้ง bash ผ่าน Homebrew ตามที่คนอื่น ๆ โพสต์ไว้
2) ตั้งค่าล็อกอินเชลล์เป็นเวอร์ชั่นใหม่นี้ (ผ่านคำสั่ง GUI หรือ chsh เหมือนที่คนอื่น ๆ โพสต์ไว้)
3) ตั้งค่า/usr/local/bin
(หรือเส้นทางไปยังเวอร์ชั่นทุบตีใหม่) ล่วงหน้าของ/bin
ตัวแปร $ PATH ของคุณโดยเพิ่มสิ่งนี้ลงใน~/.bash_profile
:export PATH=/usr/local/bin:$PATH
.bash_profile
มันดังนั้นมันจะส่งผลกระทบต่อบางสิ่งที่คุณเรียกใช้ในเทอร์มินัลเท่านั้น