Cách cập nhật bash trên Mac OS X Yosemite


25

Chỉ cần cố gắng học bash scripting một chút. Phiên bản bash cũ của tôi:

Bash version 3.2.53(1)-release...

Tôi đã cập nhật bash của mình trên mac os x yosemite với homebrew:

brew update
brew install bash

Sau đó, trong các thuộc tính thiết bị đầu cuối, tôi đã thay đổi đường dẫn shell tiêu chuẩn từ /bin/bashthành /usr/local/bin/bash(Theo tôi hiểu đây là nơi homebrew cài đặt bash cập nhật).

Sau đó, tôi đã kiểm tra lại kết quả (và có vẻ như tất cả đều tốt):

$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...

Nhưng khi tôi đang cố gắng viết một kịch bản bash đơn giản:

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done

KẾT QUẢ LÀ:

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times

THAY VÌ:

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

Tại sao phiên bản Bash thay đổi trở lại phiên bản cũ khi tôi đang cố thực thi tập lệnh trong cùng một trình bao ??? Điều này chỉ làm tôi hoảng sợ! Xin ai đó giải thích cho tôi vấn đề của tôi là gì)))

Câu trả lời:


17

Vấn đề của bạn là trong dòng đầu tiên của bạn. Bạn có cái này:

#!/bin/bash

trong đó nêu rõ rằng kịch bản shell nên được chạy với cái cũ /bin/bash. Những gì bạn thực sự muốn, là đây:

#!/usr/local/bin/bash

để sử dụng mới bashtừ /usr/local/bin.


điều kỳ lạ, nhưng nó thực sự không hoạt động. Vẫn kết quả tương tự (((Nhưng tôi chắc chắn đây là một phần của vấn đề
vẽ

Tôi có cần chỉ định đường dẫn này ở nơi khác không? Trong một số tập tin shell hoặc cái gì đó?
vẽ

1
Có lẽ môi trường được thiết lập bởi vỏ gọi, tức là Bash cũ? Chính xác thì bạn đang gọi kịch bản của mình như thế nào, @Andrew?
slhck

1
@Andrew, tôi nghi ngờ rằng bạn shđang ở /bin. brewcó lẽ đã không tạo ra một liên kết tượng trưng cho cuộc bashgọi sh. Với $PATHthiết lập của bạn một cách chính xác, hãy thử bắt đầu nó như thế này : bash script.sh.
BenjiWiebe

8
Để tham khảo trong tương lai, có lẽ bạn nên sử dụng#!/usr/bin/env bash
pjvandehaar

15

Cài đặt bash mới:

brew install bash

Đặt đây là shell mặc định:

chsh -s /usr/local/bin/bash

Đặt môi trường trong một tập lệnh:

#!/usr/bin/env bash

Sử dụng envsẽ tìm kiếm Bash trong của bạn $PATHvà sử dụng cái đầu tiên mà nó gặp phải. Bạn có thể thấy bashnó sẽ sử dụng bằng cách gõ which bash. Nếu nó nhìn thấy /bin/bashđầu tiên, bạn sẽ cần phải thiết lập của bạn $PATHtrong ~/.bashrc/.bash_profile.


2
Nếu bạn thấy "shell không chuẩn" được in ra khi sử dụng chsh, bạn sẽ cần cập nhật / etc / shell .
Scott Willeke

6

Như pjv đã chỉ ra, bạn thực sự nên sử dụng

#!/usr/bin/env bash

trong các kịch bản của bạn ở khắp mọi nơi để được di động. Ví dụ: nếu bạn cố chạy tập lệnh của mình với

#!/usr/local/bin/bash

nó sẽ thất bại trên hầu hết các hệ thống linux.

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.