Có an toàn để nâng cấp Bash qua Homebrew không?


81

Tôi mới dùng OS X. Tôi đang chạy OS X Lion trên MacBook Pro. Có an toàn không khi nâng cấp bash shell bằng Homebrew:

$ brew install bash

Nếu an toàn, làm cách nào để biến nó thành phiên bản mặc định của shell mà tôi chạy qua Terminal?

Cảm ơn!


2
Câu hỏi này đột nhiên trở nên cực kỳ phù hợp, xem Shellshock
ecnepsnai

Đúng. 10 ký tự
shrx

Câu trả lời:


105

Các nhị phân /{,usr/}{,s}bin/thường không nên được thay thế bằng các tệp khác. Các chương trình khác hy vọng chúng là phiên bản đi kèm với OS X và chúng được thay thế bằng các bản nâng cấp hệ điều hành.

Sau khi chạy brew install bash, bạn có thể thay đổi shell mặc định một cách an toàn bằng cách:

  • Thêm /usr/local/bin/bashvào/etc/shells
  • Chạy chsh -s /usr/local/bin/bash.

Cài đặt trong Terminal hoặc iTerm 2 thường không phải thay đổi. Cả hai đều mặc định mở các cửa sổ mới bằng vỏ đăng nhập của vỏ mặc định.

Shell mặc định cũng có thể được thay đổi từ System Preferences hoặc với dscl, nhưng cả ba tùy chọn chỉ cần sửa đổi /var/db/dslocal/nodes/Default/users/$USER.plist.


Có vẻ như nó đã hoạt động, và nếu tôi gặp bất kỳ vấn đề nào, nó sẽ dễ dàng quay trở lại! Cảm ơn!
Rudy

không biết rằng trang tùy chọn nâng cao đã ở đó. Ngọt!
lemonginger

2
Một chút về chỉnh sửa /etc/shellsđể bao gồm bash cài đặt bia là bắt buộc. Nếu không (ít nhất là trên máy của tôi) Terminal sẽ từ chối bắt đầu.
brendanjerwin

2
Lệnh thứ ba (csh -s) dường như không còn cần thiết trên Mavericks 10.9.2.
Brent Faust

2
Tôi chỉ phải brew install bashlàm việc này. (tức là không phải sửa đổi /etc/shells)
Daniel

4

Tôi có thể sai ở đây, nhưng theo như tôi biết brewsẽ cài đặt ví dụ của riêng nó bash, vì brew hoạt động /usr/local/bintrong khi hệ thống mặc định hoạt động theo /bin(và /usr/bin).

Về Terminal, bạn có thể mở shell bằng lệnh tùy chỉnh của riêng bạn. Đi tới Tùy chọn> Khởi động và chọn Shell mở bằng: Lệnh (đường dẫn hoàn chỉnh) . Đơn giản chỉ cần gõ đường dẫn đến mới bashvà v mộng của bạn !

Hy vọng nó giúp!

BTW: Sao lưu! Lời khuyên tốt nhất trong tình huống này!


này, bạn biết không, câu trả lời này thực sự có tác dụng như một

0

Trước khi bạn làm bất cứ điều gì, hãy sao lưu tệp hiện tại của bạn (tất nhiên, nhưng luôn xứng đáng được nói)

sudo cp /bin/bash /bin/bash.3.2.bk

Sau đó, tạo một liên kết tượng trưng đến bash thực thi mà Homebrew đã tải xuống. Tôi nghĩ nó sẽ ở / usr / local / Cellar, như vậy

sudo ln -s /usr/local/Cellar/bash/4.2.10/bin/bash /bin/bash

Bây giờ / bin / bash trỏ đến tệp trong thư mục usr / local của bạn


3
Nhược điểm của việc đưa ra một bash mới cho phiên bản hệ thống là bất kỳ bản cập nhật nào của HĐH đều có thể xóa lớp vỏ ưa thích của bạn. Có lẽ OP muốn sử dụng các tính năng mới có thể bị hỏng nếu HĐH cài đặt phiên bản bash "mới hơn HĐH cũ" nhưng "cũ hơn tùy chỉnh". Tốt hơn để thay đổi đường dẫn mặc định hoặc thay đổi biến vỏ người dùng.
bmike

tốt, bạn chỉ có thể tạo một simlink mới vì nó sẽ không ghi đè lên phiên bản bash trong thư mục usr / local của bạn. nhưng bạn đã đúng, cách của Daniel là
thăm dò

Ooh - chỉnh sửa câu trả lời của bạn xin vui lòng đặt câu hỏi đó trước (và giữ ý tưởng ban đầu nếu bạn thích thay thế thứ hai - tôi thích điều đó tốt hơn nhiều và sẽ thích cơ hội đảo ngược phiếu bầu của tôi :-)
bmike

1
hmm, đó là / là / những gì tôi đã nói, nhưng tôi đã chỉnh sửa để cố gắng làm rõ những gì mỗi bước làm tốt hơn một chút. Vẫn nghĩ rằng câu trả lời được xếp hạng hàng đầu là
thăm dò

Đây có vẻ là một cách khá nguy hiểm để thay đổi hệ thống.
Samuel Mikel Bowles

0

Tôi nghĩ rằng nó an toàn nếu bạn chỉ khởi động

brew install bash

và sau đó thêm nó làm vỏ mặc định của bạn

chsh -s /usr/local/bin/bash

vì bạn chỉ sửa đổi người dùng hiện tại của bạn. Tuy nhiên, tôi nhận thấy rằng mặc định của tôi ~ / .profile

if [ "/bin/bash" == $BASH ]; then
    source ~/.bashrc
fi

vì vậy nó cần được cập nhật Tôi đã đổi nó thành

if [ "bash" == $(basename $BASH) ]; then
        source ~/.bashrc
fi

Xem câu trả lời khác cho lý do tại sao chshmột mình là không đủ. Ngoài ra, đoạn trích .profile được cập nhật của bạn trông giống hệt với đoạn gốc
nohillside

@patrix: nhờ chỉ ra, tôi đã cập nhật đoạn mã thứ hai. Sẽ thật tuyệt nếu brew install bashkhông yêu cầu thêm bất kỳ hành động nào. Với hồ sơ cập nhật tôi đã chia sẻ, nó không. Tôi hy vọng điều này có thể giúp đỡ người khác.
Gianluca Casati
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.