Có gì mới trong bash 5


29

Tôi vừa mới đi qua kho bash chính thức (tôi thường không làm điều này) cho một cái gì đó không liên quan nhưng nhận thấy rằng bash 5 đã ở giai đoạn thử nghiệm. Tôi chỉ tò mò về những gì sẽ là mới trong bash 5 nhưng không thể tìm thấy bất kỳ thông tin nào. Ai đó có thể tóm tắt các thay đổi giữa phiên bản 4.4 và 5 của Bash không


6
Nó ở ngay trong CHANGEStệp: git.savannah.gnu.org/cgit/bash.git/tree/ mẹo
muru

Câu trả lời:


21

Những thay đổi được thực hiện bashgiữa phiên bản 4.4 và 5.0 (phát hành 2019-01-07) có thể được tìm thấy trong NEWStệp trong bản bashphân phối nguồn.

Đây là một liên kết đến nó (những thay đổi quá nhiều để liệt kê ở đây).


Một cái nhìn ngắn cho thấy thuật ngữ loadable builtins. Có bashtuân theo tiêu chuẩn mới được thiết lập bằng cách ksh93tìm các nội dung nâng cao thông qua PATHthay vì luôn ưu tiên chúng không?
hỏi

@schily bash4.4 trở lên sử dụng BASH_LOADABLES_PATHvà tải chúng từ đó với enable -f builtin-name.
Kusalananda

Vâng, điều này dường như áp dụng cho thời gian khi lệnh được tải. Còn về thời gian đã qua thì sao? enabletrông giống như thực hiện lại ksh93lệnh builtinnhưng nó bỏ lỡ tính năng liên kết một đường dẫn đến mọi lệnh dựng sẵn, ksh93thường được xác định trước bởi /usr/ast/bin/<name>và cho phép kiểm soát chi tiết tốt đối với tất cả các buiiltin.
schily

@Kusalananda làm thế nào tôi có thể nhận được một bash 5.0 mới
Ankur Loriya

@AnkurLoriya Bạn đợi cho đến khi nhà phân phối Unix gửi nó dưới dạng gói hoặc bạn tự biên dịch nó từ các nguồn. Các nguồn và hướng dẫn cài đặt có sẵn trên trang GNU Bash .
Kusalananda

14

Nếu bạn, giống như tôi, đang tìm kiếm các tính năng tiêu đề thay vì thay đổi đầy đủ, bài đăng này của người duy trì, Chet Ramey, sẽ vượt qua điều đó. Đây là phần thú vị:

Bản phát hành này sửa một số lỗi nổi bật trong bash-4.4 và giới thiệu một số tính năng mới. Các sửa lỗi quan trọng nhất là một đại tu về cách các biến nameref giải quyết và một số lỗi bộ nhớ ngoài giới hạn tiềm năng được phát hiện thông qua fuzzing. Có một số thay đổi đối với việc mở rộng $ @ và $ * trong các bối cảnh khác nhau trong đó việc phân tách từ không được thực hiện để tuân theo cách hiểu theo tiêu chuẩn Posix và các thay đổi bổ sung để giải quyết các trường hợp góc cho sự phù hợp của Posix.

Các tính năng mới đáng chú ý nhất là một số biến shell mới: BASH_ARGV0, EPOCHSECONDS và EPOCHREALTIME. Nội dung 'lịch sử' có thể loại bỏ các phạm vi của các mục lịch sử và hiểu các đối số phủ định dưới dạng offset từ cuối danh sách lịch sử. Có một tùy chọn cho phép các biến cục bộ kế thừa giá trị của một biến có cùng tên ở phạm vi trước. Có một tùy chọn shell mới, khi được kích hoạt, khiến shell cố gắng mở rộng các chỉ số mảng kết hợp chỉ một lần (đây là vấn đề khi chúng được sử dụng trong các biểu thức số học). Tùy chọn hệ vỏ `continasciiranges 'hiện được bật theo mặc định; nó có thể được tắt theo mặc định tại thời điểm cấu hình.

Có một vài thay đổi không tương thích giữa bash-4.4 và bash-5.0. Những thay đổi về cách giải quyết các biến nameref có nghĩa là một số cách sử dụng namerefs sẽ hoạt động khác đi, mặc dù tôi đã cố gắng giảm thiểu các vấn đề tương thích. Theo mặc định, hệ vỏ chỉ đặt BASH_ARGC và BASH_ARGV khi khởi động nếu chế độ gỡ lỗi mở rộng được bật; đó là một sự giám sát rằng nó đã được đặt ra vô điều kiện và gây ra các vấn đề về hiệu suất khi các tập lệnh được truyền qua một số lượng lớn các đối số.

Ông cũng đề cập đến hai tập tin này, trong trường hợp bạn muốn nhiều hơn:

  • TIN TỨC : chi tiết hơn (cũng trong câu trả lời của Kusalananda)
  • THAY ĐỔI : chi tiết nhất

5

Nội dung 'lịch sử' có thể loại bỏ các phạm vi của các mục lịch sử và hiểu các đối số phủ định là phần bù trừ từ cuối danh sách lịch sử.

Ví dụ về xóa một phạm vi:

history -d 123-130

hoặc xóa 10 cuối cùng:

history -d -10--1

Trích từ trang Bash 5 Man :

'lịch sử'

Tùy chọn, nếu được cung cấp, có các ý nghĩa sau:

'-d OFFSET' Xóa mục lịch sử tại vị trí OFFSET. Nếu OFFSET là dương, nó sẽ được chỉ định khi nó xuất hiện khi lịch sử được hiển thị. Nếu OFFSET âm, nó được hiểu là tương đối so với vị trí lịch sử cuối cùng, do đó, các chỉ số phủ định sẽ được tính lại từ cuối lịch sử và chỉ số '-1' đề cập đến lệnh 'history -d' hiện tại.

'-d START-END' Xóa các mục lịch sử giữa các vị trí START và END, đã bao gồm. Các giá trị dương và âm cho START và END được diễn giải như mô tả ở trên.

Xem câu trả lời liên quan của tôi: Xóa một loạt lịch sử bash

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.