Các vỏ bọc là trình thông dịch dòng lệnh dịch các lệnh do người dùng nhập vào thành các hành động được thực hiện bởi hệ điều hành. Trình bao có thể được bắt đầu theo cách tương tác (nơi người dùng có thể nhập và thực thi lệnh) hoặc theo cách không tương tác (được phân nhánh bởi tập lệnh hoặc chương trình như crontab, vân vân.).
Các trình bao tương tác được bắt đầu trong trình giả lập thiết bị đầu cuối, đề cập đến các ứng dụng GUI như thiết bị đầu cuối gnome, xterm, v.v. hoặc trong TTY đề cập đến bảng điều khiển văn bản ảo. Các TTY có thể truy cập bằng tổ hợp phím Điều khiển thay thế F1-9. Trong các bản phân phối máy tính để bàn của Linux, môi trường máy tính để bàn đang chạy trong một trong các TTY này.
Người giới thiệu:
Bất kể đó là trình giả lập thiết bị đầu cuối hay TTY, bạn đều có khả năng thực hiện những điều tương tự với trình bao chạy bên trong.
Shell của người dùng mặc định trong Ubuntu là Bash. Có một tệp khởi tạo được gọi là .bashrc
được đặt trong thư mục chính của người dùng. Tệp này (cùng với một số tệp khởi tạo hệ thống khác như /etc/bash.bashrc
) Là có nguồn gốc khi người dùng mở một shell tương tác mới. Do đó, môi trường mặc định của người dùng được tạo.
Theo nghĩa đen bằng cách tìm nguồn cung ứng .bashrc
một số biến môi trường nhận được các giá trị nhất định. Các biến môi trường như vậy là:
$PATH
chứa các đường dẫn hệ thống được phân tách bằng cột nơi có thể tìm thấy các tệp thực thi,
$PS1
xác định lời nhắc của bạn trông như thế nào, ví dụ.: user@host:/current/directory$,
$LANG
đặt ngôn ngữ mặc định hoặc $LC_ALL
ghi đè tất cả các cài đặt ngôn ngữ (nguồn của lời giải thích này, đọc thêm tại người đàn ông địa phương
).
Vì vậy, nếu bạn muốn thay đổi vĩnh viễn một số biến môi trường (trong trình bao Bash của người dùng), bạn có thể sửa đổi (hoặc đặt) giá trị của nó trong .bashrc
. Nếu không, thay đổi sẽ chỉ có hiệu lực đối với phiên bản hiện tại của trình bao.
Ví dụ: mở một thiết bị đầu cuối mới và gõ PS1='prompt_changed->'
và lời nhắc của bạn sẽ được thay đổi thành chuỗi đó. Sau đó, tiếp tục mở cửa sổ đầu cuối đó và mở một thiết bị đầu cuối mới - bạn sẽ thấy thay đổi này không được áp dụng ở đó. Để khôi phục thiết bị đầu cuối đầu tiên, bạn có thể lấy nguồn thủ công .bashrc
tập tin bằng lệnh . ~/.bashrc
.
Khi bạn sử dụng xuất khẩu
lệnh bạn đang xuất một biến sang vỏ con được rẽ nhánh từ hệ vỏ hiện tại (hệ vỏ con), không phải với các hệ vỏ (anh chị em) khác được tạo bởi các tiến trình cha của hệ vỏ hiện tại.Đây là một ví dụ:
user@host:~$ VAR='Xin chào!' # Xác định một biến gọi là VAR
user@host:~$ echo $VAR # Xuất giá trị của biến
Xin chào!
user@host:~$ export VAR # Xuất biến
user@host:~$ bash # Ngã ba vỏ bash mới
user@host:~$ echo $VAR # Xuất giá trị của biến đã xuất
Xin chào!
user@host:~$ exit # Thoát sang trình bao chính
user@host:~$ sh # Ngã ba vỏ sh (dấu gạch ngang) mới
$ echo $VAR # Xuất giá trị của biến đã xuất
Xin chào!
Lệnh env
được sử dụng để thay đổi môi trường thực thi lệnh hoặc tập lệnh. Dưới đây là một vài dòng từ người đàn ông ghen tị
:
env
- đặt môi trường cho lệnh gọi. Các env
tiện ích sẽ có được môi trường hiện tại, sửa đổi
nó theo các đối số của nó, sau đó gọi tiện ích được đặt tên bởi
toán hạng tiện ích với môi trường đã sửa đổi.
-tôi
Gọi tiện ích với chính xác môi trường được chỉ định bởi các đối số; môi trường kế thừa sẽ bị bỏ qua hoàn toàn.
Lệnh sau: env -i PATH=/mybin mygrep xyz myfile
gọi lệnh mygrep
với một cái mới CON ĐƯỜNG
value là mục nhập duy nhất trong môi trường của nó. Trong trường hợp này, CON ĐƯỜNG
được sử dụng để xác định vị trí mygrep
, mà sau đó phải nằm trong /mybin
.
env
thường được sử dụng ở phần đầu của tập lệnh (trong cái gọi là shebang) để tăng tính di động của chúng. Đây là hai chủ đề bao gồm việc sử dụng này:
Khi chạy mà không có đối số, env
lệnh xuất ra một danh sách các biến môi trường.
Một lần nữa, các .bashrc
tệp trong thư mục chính tùy chỉnh các tính năng của trình bao, chẳng hạn như tạo hoặc sửa đổi các biến và bí danh cũng như xác định các hàm.
Ví dụ, hãy xác định chức năng sau ở dưới cùng của .bashrc
tập tin.
xin chào() { echo "Xin chào, ${USER^}!"; }
Sau khi lưu tệp, bạn có thể lấy nguồn hoặc mở một phiên bản thiết bị đầu cuối mới và nhập xin chào
.
spa@host:~$ xin chào
Xin chào các Spa!
Vì vậy, chúng ta có thể thấy chức năng này (hoặc biến hoặc bí danh) có sẵn trong trình bao hiện tại. Ở giai đoạn này nó được gọi là địa phương chức năng (hoặc biến hoặc bí danh), vì vậy nếu chúng ta kiểm tra môi trường bằng cách vi | xin chào
chức năng của chúng tôi sẽ không có ở đó.
Các biến cục bộ chỉ tồn tại trong trình bao hiện tại và không thể ảnh hưởng đến các lệnh hoặc ứng dụng khác.
Sau khi định nghĩa một hàm (biến, bí danh) trong .bashrc
chúng ta có thể xuất nó để làm cho nó có sẵn cho các trình bao phụ (các lệnh hoặc tập lệnh) được rẽ nhánh từ trình bao hiện tại - do đó, nó trở thành toàn cầu hoặc môi trường chức năng (biến, bí danh).
xin chào() { echo "Xin chào, ${USER^}!"; }
xuất -f xin chào
spas@host:~$ source ~/.bashrc # trong bash 'source' là bản tóm tắt của '.'
spas@host:~$ env | grep 'hello' # parse 'hello' trong đầu ra của 'env'
BASH_FUNC_hello%%=() { echo "Xin chào, ${USER^}!"
spas@host:~$ bash -c 'hello' # fork một shell phụ không tương tác
Xin chào các Spa! # và thực hiện chức năng bên trong
Hãy nhớ rằng các trình bao không tương tác, trong hầu hết các trường hợp, không cung cấp nguồn theo mặc định cho các tệp khởi tạo dưới dạng .bashrc
, vì vậy môi trường của chúng bị hạn chế hơn so với môi trường của các shell tương tác.
Ví dụ: khi bạn thiết kế một tập lệnh sẽ được sử dụng bởi crontab bạn phải sử dụng đường dẫn đầy đủ đến các lệnh hoặc đảm bảo rằng nó có môi trường cần thiết.