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

Nhập các hàm và biến vào Bash bằng lệnh nguồn

Khi bạn đăng nhập vào Linux shell, bạn thừa hưởng một môi trường làm việc cụ thể. Một môi trường , trong ngữ cảnh của một trình bao, có nghĩa là có một số biến nhất định đã được thiết lập cho bạn, điều này đảm bảo các lệnh của bạn hoạt động như dự định. Ví dụ, biến môi trường PATH xác định nơi trình bao của bạn tìm kiếm các lệnh. Nếu không có nó, gần như mọi thứ bạn cố gắng thực hiện trong Bash sẽ không thành công với một lệnh không tìm thấy lỗi. Môi trường của bạn, mặc dù hầu như vô hình đối với bạn khi bạn thực hiện các công việc hàng ngày, nhưng lại cực kỳ quan trọng.

Có nhiều cách để ảnh hưởng đến môi trường shell của bạn. Bạn có thể thực hiện sửa đổi trong các tệp cấu hình, chẳng hạn như ~/.bashrc~/.profile , bạn có thể chạy các dịch vụ khi khởi động và bạn có thể tạo các lệnh tùy chỉnh của riêng mình hoặc tập lệnh cho các hàm Bash của riêng bạn.

Thêm vào môi trường của bạn với nguồn

Bash (cùng với một số shell khác) có một lệnh tích hợp được gọi là source . Và đây là nơi nó có thể gây nhầm lẫn:source thực hiện chức năng tương tự như lệnh . (vâng, đó chỉ là một dấu chấm) và nó không phải cùng một nguồn source dưới dạng Tcl lệnh (có thể xuất hiện trên màn hình của bạn nếu bạn nhập man source ). source tích hợp sẵn lệnh không có trong PATH của bạn trên thực tế. Đó là một lệnh được bao gồm như một phần của Bash và để biết thêm thông tin về nó, bạn có thể nhập help source .

. lệnh tương thích với POSIX. Nguồn source lệnh không được định nghĩa bởi POSIX nhưng có thể hoán đổi cho nhau bằng . lệnh.

Theo Bash help , source lệnh thực thi một tệp trong trình bao hiện tại của bạn. Mệnh đề "trong trình bao hiện tại của bạn" rất quan trọng, vì nó có nghĩa là nó không khởi chạy một trình bao con; do đó, bất cứ điều gì bạn thực thi với source xảy ra bên trong và ảnh hưởng đến hiện tại của bạn môi trường.

Trước khi khám phá cách source có thể ảnh hưởng đến môi trường của bạn, hãy thử source trên một tệp thử nghiệm để đảm bảo rằng nó thực thi mã như mong đợi. Đầu tiên, tạo một tập lệnh Bash đơn giản và lưu nó dưới dạng tệp có tên hello.sh :

 #! / usr / bin / env bash 
echo "hello world"

Sử dụng source , bạn có thể chạy tập lệnh này ngay cả khi không đặt bit thực thi:

 $ source hello.sh 
hello world

Bạn cũng có thể sử dụng . tích hợp sẵn. lệnh cho cùng một kết quả:

 $. hello.sh 
xin chào thế giới

Nguồn source. lệnh thực thi thành công nội dung của tệp thử nghiệm.

Đặt biến và nhập hàm

Bạn có thể sử dụng source để "nhập" tệp vào môi trường shell của bạn, giống như bạn có thể sử dụng include từ khóa trong C hoặc C ++ để tham chiếu thư viện hoặc import từ khóa trong Python để đưa vào một mô-đun. Đây là một trong những cách sử dụng phổ biến nhất cho source và đó là một bao gồm mặc định phổ biến trong .bashrc tệp vào source một tệp có tên .bash_aliases để mọi bí danh tùy chỉnh mà bạn xác định sẽ được nhập vào môi trường của bạn khi bạn đăng nhập.

Đây là một ví dụ về nhập một hàm Bash. Đầu tiên, tạo một hàm trong tệp có tên myfunctions . Điều này in địa chỉ IP công cộng và địa chỉ IP cục bộ của bạn:

 function myip () {
curl https://icanhazip.com

ip addr | grep inet $ IP | \
cut -d "/" -f 1 | \
grep -v 127 \ .0 | \
grep -v \:\:1 | \
awk '{$ 1 =$ 1}; 1'
}

Nhập hàm vào shell của bạn:

 $ source myfunctions 

Kiểm tra chức năng mới của bạn:

 $ myip 
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38
trước>

Tìm kiếm nguồn

Khi bạn sử dụng source trong Bash, nó tìm kiếm thư mục hiện tại của bạn cho tệp bạn tham chiếu. Điều này không xảy ra trong tất cả các shell, vì vậy hãy kiểm tra tài liệu của bạn nếu bạn không sử dụng Bash.

Nếu Bash không thể tìm thấy tệp để thực thi, nó sẽ tìm kiếm PATH của bạn thay vì. Một lần nữa, đây không phải là mặc định cho tất cả các trình bao, vì vậy hãy kiểm tra tài liệu của bạn nếu bạn không sử dụng Bash.

Đây là cả hai tính năng tiện lợi tốt đẹp trong Bash. Hành vi này mạnh mẽ một cách đáng ngạc nhiên vì nó cho phép bạn lưu trữ các chức năng phổ biến ở một vị trí tập trung trên ổ đĩa của bạn và sau đó xử lý môi trường của bạn như một môi trường phát triển tích hợp (IDE). Bạn không phải lo lắng về nơi các hàm của mình được lưu trữ, vì bạn biết chúng ở địa phương tương đương với /usr/include , vì vậy, bất kể bạn đang ở đâu khi bạn tìm nguồn, Bash sẽ tìm thấy chúng.

Ví dụ:bạn có thể tạo một thư mục có tên ~/.local/include làm khu vực lưu trữ cho các chức năng thông thường và sau đó đặt khối mã này vào .bashrc của bạn tệp:

 cho tôi trong $ HOME / .local / include / *; 
do nguồn $ i
thực hiện

Điều này "nhập" bất kỳ tệp nào có chứa các hàm tùy chỉnh trong ~/.local/include vào môi trường shell của bạn.

Bash là trình bao duy nhất tìm kiếm cả thư mục hiện tại và PATH của bạn khi bạn sử dụng source hoặc . lệnh.

Sử dụng mã nguồn cho nguồn mở

Sử dụng source hoặc . để thực thi tệp có thể là một cách thuận tiện để ảnh hưởng đến môi trường của bạn trong khi vẫn giữ cho các thay đổi của bạn theo mô-đun. Lần tới khi bạn nghĩ đến việc sao chép và dán các khối mã lớn vào .bashrc của mình , hãy cân nhắc việc đặt các chức năng hoặc nhóm bí danh có liên quan vào các tệp chuyên dụng, sau đó sử dụng source để ăn chúng.