Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Biến môi trường trong Bash là gì?

Trong máy tính, một biến là một từ đại diện cho một giá trị có thể thay đổi. Bạn sử dụng các biến mỗi ngày trong bài phát biểu bình thường, mặc dù bạn không nghĩ chúng là các biến. Khi bạn nói "xe của tôi", bạn đang sử dụng "xe của tôi" như một loại biến số đề cập đến bất kỳ chiếc xe nào bạn sở hữu vào thời điểm đó. Kiểu dáng và kiểu dáng chắc chắn sẽ thay đổi trong suốt cuộc đời của bạn khi bạn thay một chiếc xe cũ bằng một chiếc xe mới, nhưng bằng cách tạo biến "xe của tôi", bạn không cần phải lan man về loại xe hiện tại của bạn. để sở hữu mỗi khi bạn muốn tham khảo phương tiện của mình.

Trên máy tính, các biến được sử dụng theo cách tương tự.

Ví dụ:bất kỳ người nào có tài khoản người dùng trên máy tính đều có thư mục chính nơi máy tính lưu giữ dữ liệu cá nhân của họ. Nhưng mỗi người dùng có một thư mục chính riêng biệt (/home/seth cho Seth, /home/tux cho Tux, v.v. cho từng người dùng), vì vậy khi bạn muốn tham chiếu chung đến thư mục chính, bạn có thể sử dụng biến $HOME để chỉ ra thư mục chính của hiện tại người dùng, bất kể tên đăng nhập của người dùng.

Các biến môi trường là các biến đặc biệt (như $HOME ) có chứa thông tin về phiên đăng nhập của bạn. Chúng được lưu trữ cho hệ thống shell để sử dụng khi thực thi các lệnh. Chúng tồn tại cho dù bạn đang sử dụng Linux, Mac hay Windows. Nhiều biến trong số này được đặt theo mặc định trong quá trình cài đặt hoặc tạo người dùng.

Trong khi các biến môi trường áp dụng cho tất cả các hệ thống hiện đại, bài viết này đề cập cụ thể đến các biến môi trường trong Bash shell trên Linux, BSD, Mac và Cygwin.

Hiểu các biến số môi trường

Về mặt kỹ thuật, các biến môi trường không khác gì các biến số. Chúng có thể được đặt, gọi lại và xóa với cùng một cú pháp được sử dụng cho các biến. Nếu bạn không quen sử dụng các biến trong Bash, hãy đọc các biến của tôi trong bài viết Bash trước khi tiếp tục.

Bạn không thường sử dụng trực tiếp các biến môi trường. Chúng được tham chiếu bởi các ứng dụng và daemon riêng lẻ khi cần thiết. Ví dụ:thư mục chính của bạn được đặt làm biến môi trường khi bạn đăng nhập. Ví dụ:trên Linux, bạn có thể thấy HOME của mình nội dung của biến môi trường như thế này:

$ echo $HOME
HOME=/home/seth

Trên máy Mac:

$ echo $HOME
HOME=/Users/bogus

Trên Windows:

C:\Users\bogus

Bạn có thể xem tất cả các biến môi trường được đặt trên hệ thống của mình bằng env lệnh. Danh sách dài, vì vậy hãy chuyển đầu ra thông qua thêm để làm cho nó dễ đọc hơn:

$ env | more
TERM=xterm-256color
LESSOPEN=||/usr/bin/lesspipe.sh %s
USER=seth
SUDO_EDITOR=emacs
WWW_HOME=https://mirror.lagoon.nc/pub/slackware/slackware64-current/ChangeLog.txt
VISUAL=emacs
DISPLAY=:0
PS1=$
XDG_DATA_DIRS=/home/seth/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin
GDMSESSION=gnome
MAIL=/var/spool/mail/seth
[...]

Các biến môi trường có thể hữu ích khi bạn muốn ghi đè cài đặt mặc định hoặc khi bạn cần quản lý cài đặt mới mà hệ thống của bạn không có lý do gì để tự tạo. Ví dụ:khi bạn nhập lệnh, lý do duy nhất máy tính của bạn biết cách tìm ứng dụng tương ứng với lệnh đó là PATH biến môi trường cho nó biết nơi để tìm. Biến này liệt kê các thư mục hợp lệ cho hệ điều hành của bạn để tìm kiếm các lệnh, cho dù lệnh đó có phải là ls hoặc cp, hoặc một ứng dụng đồ họa như Firefox hoặc Lutris, hoặc bất kỳ thứ gì khác.

Các biến môi trường khác nhau được các hệ thống khác nhau sử dụng. PATH của bạn Ví dụ, biến quan trọng đối với trình giả lập đầu cuối của bạn, nhưng ít quan trọng hơn nhiều, chẳng hạn như Java (có các đường dẫn riêng, trỏ đến các thư viện Java quan trọng). Tuy nhiên, NGƯỜI DÙNG biến được một số hệ thống sử dụng như một cách để xác định ai đang yêu cầu dịch vụ. Ví dụ:nếu bạn đang sử dụng hệ thống nhiều người dùng và cần kiểm tra hộp thư cục bộ của mình, lệnh thư của bạn sẽ biết hộp thư nào cần truy xuất dựa trên MAIL USER biến.

Đặt biến môi trường

Thông thường, chương trình cài đặt, cho dù đó là dnf trên Fedora, apt trên Ubuntu, brew trên Mac hoặc trình cài đặt tùy chỉnh, cập nhật các biến môi trường của bạn cho một ứng dụng mới. Tuy nhiên, đôi khi, khi bạn đang cài đặt thứ gì đó bên ngoài bộ công cụ dự kiến ​​của bản phân phối, bạn có thể phải tự quản lý một biến môi trường. Hoặc bạn có thể chọn thêm một biến môi trường để phù hợp với sở thích của mình. Nếu bạn quyết định muốn giữ một số ứng dụng trong thùng thư mục nằm trong thư mục chính của bạn, sau đó bạn phải thêm thư mục đó vào PATH của mình để hệ điều hành của bạn biết tìm kiếm các ứng dụng để chạy khi bạn ra lệnh.

Biến môi trường tạm thời

Bạn có thể thêm một vị trí vào đường dẫn của mình theo cách bạn tạo các biến loại bỏ. Nó hoạt động, nhưng chỉ miễn là shell bạn đã sử dụng để sửa đổi đường dẫn hệ thống của mình vẫn mở. Ví dụ:mở Bash shell và sửa đổi đường dẫn hệ thống của bạn:

$ export PATH=$PATH:/home/seth/bin

Xác nhận kết quả:

$ echo $PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin:/home/seth/bin

Đóng phiên:

$ exit

Mở một cái mới và xem qua PATH biến:

$ echo $PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin

Biến này đã hoàn nguyên về trạng thái mặc định vì PATH không được thiết lập với mỗi trình bao mới. Vì vậy, bạn phải định cấu hình các biến của mình để tải bất kỳ khi nào một trình bao được khởi chạy.

Các biến môi trường vĩnh viễn

Bạn có thể đặt các biến môi trường liên tục của riêng mình trong tệp cấu hình shell của mình, biến phổ biến nhất trong số đó là ~ / .bashrc . Nếu bạn là quản trị viên hệ thống quản lý một số người dùng, bạn cũng có thể đặt các biến môi trường trong một tập lệnh được đặt trong /etc/profile.d thư mục.

Cú pháp để đặt một biến theo tệp cấu hình cũng giống như đặt một biến trong trình bao của bạn:

export PATH=$PATH:/snap/bin:/home/seth/bin

Đóng trình bao hiện tại, nếu không buộc nó phải tải cấu hình đã cập nhật:

$ . ~/.bashrc

Cuối cùng, hãy xem xét lại đường dẫn hệ thống của bạn:

$ echo $PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin:/home/seth/bin

Bây giờ nó được đặt chính xác để bao gồm thư mục tùy chỉnh bổ sung của bạn.

Khám phá các biến môi trường khác

Bạn có thể tạo và thao tác với các biến môi trường theo ý muốn, và một số ứng dụng làm được điều đó. Thực tế này có nghĩa là nhiều biến môi trường của bạn không được hầu hết các ứng dụng của bạn sử dụng và nếu bạn thêm các biến tùy ý của riêng mình thì một số biến có thể không được sử dụng. Vì vậy, câu hỏi đặt ra là:Làm thế nào để bạn tìm ra biến môi trường nào có ý nghĩa?

Câu trả lời nằm trong tài liệu của ứng dụng. Ví dụ:để tìm hiểu những tùy chọn nào có sẵn cho bạn cho môi trường Bash chung của bạn, bạn có thể đọc tài liệu về Bash. Trong khi trang người dùng của Bash đề cập đến nhiều biến quan trọng, trang thông tin GNU cho Bash có hai danh sách đầy đủ về các biến môi trường Bourne Shell và Bash hữu ích và cách sử dụng mỗi biến.

Ví dụ:trong danh sách trang thông tin:

'HISTCONTROL'
     A colon-separated list of values controlling how commands are saved
     on the history list.  If the list of values includes 'ignorespace',
     lines which begin with a space character are not saved in the
     history list.  A value of 'ignoredups' causes lines which match the
     previous history entry to not be saved.  A value of 'ignoreboth' is
     shorthand for 'ignorespace' and 'ignoredups'.
     [...]

Kết quả này cho bạn biết rằng HISTCONTROL biến môi trường kiểm soát cách hiển thị lịch sử Bash của bạn và những giá trị nào bạn có thể sử dụng để tùy chỉnh trải nghiệm đó. Trong ví dụ này, bỏ qua giá trị cho biết kết quả của lịch sử lệnh bỏ qua các dòng trùng lặp.

Bạn có thể kiểm tra cái này một cách dễ dàng. Đầu tiên, hãy phát hành cùng một lệnh hai lần liên tiếp:

$ echo "hello world"
hello world
$ echo "hello world"
hello world

Xem lịch sử của bạn hoặc ít nhất là các mục nhập gần đây nhất:

$ history | tail -5
 996  man bash
 997  info bash
 998  echo "hello world"
 999  echo "hello world"
 1000 history

Bạn có thể thấy rằng các mục nhập trùng lặp thực sự đã được liệt kê ngay bây giờ.

Đặt một biến môi trường mới trong .bashrc của bạn dựa trên những gì bạn đọc trong trang thông tin:

export HISTCONTROL=$HISTCONTROL:ignorespace:ignoredups

Lưu và sau đó tải cấu hình mới của bạn:

$ source ~/.bashrc

Đưa ra hai lệnh liên tiếp hai lần:

$ echo "hello once"
hello once
$ echo "hello once"
hello once

Xem các mục nhập gần đây nhất trong lịch sử của bạn:

$ history | tail -5
 1000 history
 1001 emacs ~/.bashrc
 1002 source ~/.bashrc
 1003 echo "hello once"
 1004 history

Các mục nhập trùng lặp hiện được thu gọn thành một mục nhập do biến môi trường mới của bạn, giống như trang thông tin đã chỉ định.

Tìm các biến môi trường có liên quan thường là vấn đề đọc tài liệu cho ứng dụng mà bạn muốn tác động. Hầu hết các biến môi trường cụ thể cho những gì một ứng dụng cần để chạy trơn tru. Đối với các mục nhập chung, tài liệu về shell của bạn là nơi hợp lý để xem xét. Nếu bạn viết các tập lệnh hoặc ứng dụng yêu cầu các biến môi trường mới, hãy nhớ xác định các biến đó trong tài liệu của riêng bạn.