Làm thế nào bạn có thể nói phiên bản Ubuntu trên một hệ thống trong tập lệnh .sh (bash)?


9

Vì vậy, tôi đang cố gắng tạo ra một bash / thực thi và tôi cần biết số phiên bản của Ubuntu trên hệ thống. Tất cả các cách tôi đã tìm thấy trực tuyến bao gồm lsb_release -r, tuy nhiên tôi không thể xuất nó thành một biến.

Có cách nào để có được phiên bản Ubuntu hiện tại và lưu dưới dạng một biến trong trình bao thực thi không?


Vâng, tôi đánh giá cao nó. Xin lỗi, tôi không biết có tài liệu về điều này. Dù sao tôi cũng đánh giá cao nó
a.mosallaei 31/07/19

Vâng, tôi đã làm nó. Cảm ơn
a.mosallaei

Câu trả lời:


21
Var=$(lsb_release -r)
echo "$Var"

Nên làm thủ thuật.

Đối với phần số chỉ thêm phần này:

NumOnly=$(cut -f2 <<< "$Var")
echo "$NumOnly"

Các lsb-releasetập tin biến

/usr/bin/lsb_releaselà một kịch bản Python. Đó là một đoạn script ngắn đóng vai trò giới thiệu tốt về ngôn ngữ python. Như những người khác đã đề cập, một cách ngắn hơn để chỉ có số phiên bản là với lsb_release -sr.

Các /etc/lsb-releasetập tin định nghĩa các biến môi trường với cùng một thông tin được cung cấp bởi các lsb_release -alệnh:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

Bạn có thể bao gồm các biến môi trường này bất cứ lúc nào bằng cách sử dụng . /etc/lsb-release. Để kiểm tra trong thiết bị đầu cuối của bạn:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS

Vì vậy, có cảm ơn bạn, nó làm việc, nó đầu ra Release: 18.04. Tuy nhiên, có cách nào để lấy số? Tôi muốn có thể sử dụng biến này trong hàm if / other trong tập lệnh. Mục đích của if / other là tải xuống phiên bản chính xác của ứng dụng của tôi cho bản phân phối của ubfox.
a.mosallaei

À không sao cả. @ user68186 đã giải quyết vấn đề của tôi. Cảm ơn các bạn rất nhiều!
a.mosallaei

Tôi sẽ viết câu trả lời nhưng bạn đã đánh bại tôi! :-) Tôi rất vui được đóng góp.
dùng68186

4
@ a.mosallaei một lời cảnh báo - nếu bạn chỉ sử dụng phần số và bỏ qua mọi thứ khác, tập lệnh này sẽ có kết quả kỳ lạ trên bất kỳ máy không phải Ubuntu nào (bao gồm nhiều bản phân phối dựa trên Ubuntu "tương thích" với Ubuntu nhưng có tên và phiên bản riêng); bạn có thể cần xác minh xem kết quả lsb_release bắt đầu bằng "Ubuntu" trước khi sử dụng số này.
Peteris

1
@ a.mosallaei Bạn nói rằng tệp thực thi của bạn sẽ chỉ được sử dụng trên các máy tính Ubuntu. Làm sao bạn biết điều đó? Tốt hơn là có một lỗi an toàn thoát ra nếu bản phân phối không phải là Ubuntu. Tin tôi đi, người dùng sẽ cố làm hỏng chương trình của bạn.
Kryštof Píštěk

11

Một cách khác là sử dụng /etc/os-releasetập tin thay thế. Điều này được định dạng như một danh sách các biến shell:

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

Vì vậy, một cách dễ dàng để phân tích cú pháp là chỉ đơn giản sourcelà tệp:

$ . /etc/os-release

$ echo $NAME
Ubuntu

$ echo $VERSION
18.04.2 LTS (Bionic Beaver)

$ echo $PRETTY_NAME
Ubuntu 18.04.2 LTS


$ echo $VERSION_ID
18.04

Để tránh cài đặt tất cả các biến này không cần thiết, bạn có thể tìm nguồn các tập tin trong một subshell , echo biến bạn cần và thoát khỏi subshell:

$ ( . /etc/os-release ; echo $VERSION_ID)
18.04

Ngoài ra, bạn luôn có thể phân tích cú pháp tệp trực tiếp:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04

1
Lưu ý rằng đối với các dẫn xuất Ubuntu, thông tin phiên bản có thể đề cập đến phiên bản xuôi dòng (ví dụ: Tôi đã có VERSION_ID = "18.3" và VERSION_CODENAME = "sylvia" cho hộp Mint của tôi). Mặc dù vậy, UBUNTU_CODENAME phải chính xác.
Roger Lipscombe

subshell là cách mạnh mẽ nhất để làm điều này, phải không?
JamesTheAwgieDude

@JamesTheAwgieDude có lẽ, vâng.
terdon

8

Các lsb_releaselệnh hỗ trợ một -s(hoặc --shorttùy chọn) để in chỉ là thông tin mà bạn yêu cầu và không phải là tiêu đề mà nói loại thông tin đó là những gì.

Để chỉ lấy số phiên bản, nó đủ để chạy:

lsb_release -sr

Ví dụ: trên Ubuntu 18.04 LTS, kết quả đầu ra:

18.04

Như với phương thức trong câu trả lời của WinEunuuchs2Unix , vẫn hợp lý khi sử dụng thay thế lệnh để gán đầu ra này cho một biến shell. Giả sử bạn muốn verbiến giữ số phát hành:

ver="$(lsb_release -sr)"

Với -s, không có cần phải phân tích ra các số với cut, sed, grep, awk, hình thức phức tạp hơn của việc mở rộng tham số , hoặc tương tự.

Trong cách sử dụng này, các " "trích dẫn là tùy chọn, nhưng tôi thường đề nghị trích dẫn mở rộng tham sốmở rộng shell khác trừ khi có lý do không.


Vâng, cảm ơn! Tôi không bao giờ hiểu -s, nhưng bạn đã giải thích nó một cách hoàn hảo! Đánh giá cao
a.mosallaei

5

Các lsb_releaselệnh ngắn và đơn giản .

  • Chỉ in phiên bản

    lsb_release -sr

    Đầu ra:

    18.04
  • Để in mô tả

    lsb_release -sd

    Đầu ra:

    Ubuntu 18.04.2 LTS

Về cờ được sử dụng ở đây:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
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.