Tám tùy chọn Bash ít được biết đến

Một số tùy chọn Bash rất nổi tiếng và thường được sử dụng. Ví dụ, nhiều người viết ở phần đầu của kịch bản

đặt -o xtrace

để gỡ lỗi,

đặt -o errexit

thoát do nhầm lẫn hoặc

đặt -o lỗi

để thoát nếu biến được gọi không được đặt.

Nhưng có nhiều lựa chọn khác. Đôi khi chúng được mô tả quá khó hiểu trong manas, vì vậy tôi đã thu thập một số mana hữu ích nhất ở đây cùng với lời giải thích.

Lưu ý: Máy Mac có thể có phiên bản bash cũ hơn (3.x thay vì 4.x), trong đó không phải tất cả các tùy chọn này đều khả dụng. Trong trường hợp này, xem đây hoặc đây.

set hoặc shopt?

Có hai cách để đặt tùy chọn bash: từ tập lệnh hoặc từ dòng lệnh. Bạn có thể sử dụng các lệnh tích hợp set и shopt. Cả hai đều thay đổi hành vi của shell, thực hiện nhiều việc giống nhau (với các đối số khác nhau), nhưng khác nhau về nguồn gốc... Tùy chọn set được kế thừa hoặc mượn từ các tham số của các shell khác, trong khi các tham số shopt được tạo trong bash.

Nếu bạn muốn xem các tùy chọn hiện tại, hãy chạy:

$ set -o
$ shopt

Để kích hoạt tùy chọn trong set Cú pháp dài hoặc ngắn được sử dụng:

$ set -o errunset
$ set -e

Hiệu quả là như nhau.

Để tắt tùy chọn, bạn cần đặt dấu cộng thay vì dấu trừ:

$ set +e

Trong một thời gian dài, tôi không thể nhớ được cú pháp này vì logic có vẻ sai (dấu trừ kích hoạt tùy chọn và dấu cộng vô hiệu hóa nó).

В shopt cờ (hợp lý hơn) được sử dụng để bật và tắt các tùy chọn -s (thiết lập và -u (không đặt):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

Thay đổi thư mục

Có một số tùy chọn giúp bạn làm việc với các thư mục.

1.cdspell

Với cài đặt này, bash sẽ bắt đầu hiểu lỗi chính tả và sẽ đưa bạn đến thư mục có tên bạn viết sai chính tả.

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

Tôi đã sử dụng tùy chọn này trong nhiều năm và rất hiếm khi (có thể mỗi năm một lần) nó đưa ra một quyết định rất kỳ lạ. Nhưng vào những ngày khác cdspell tiết kiệm thời gian, theo đúng nghĩa đen mỗi ngày.

2. tự động

Nếu bạn không sẵn sàng chấp nhận sự kém hiệu quả của nhiều mục cd, thì bạn có thể đặt tùy chọn này để di chuyển đến thư mục X nếu lệnh X không tồn tại.

$ shopt -s autocd
$ abcdefg
$ cd ..

Kết hợp với tính năng tự động hoàn thành, điều này cho phép bạn nhanh chóng chuyển giữa các thư mục:

$ ./abc[TAB][RETURN]
cd -- ./abcdefg

Chỉ cần không đặt tên thư mục rm -rf * (vâng, nhân tiện, điều này là có thể).

3.mở rộng

Đây là một tùy chọn thú vị giúp mở rộng các biến môi trường bằng cách nhấn Tab:

$ shopt -s direxpand
$ ./[TAB]     # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  заменяется на...
$ /full/path/to/home/folder

đầu ra sạch

4. kiểm tra công việc

Tùy chọn này dừng đăng xuất khỏi phiên nếu vẫn còn công việc đang chạy ẩn.

Thay vì thoát ra, một danh sách các nhiệm vụ chưa hoàn thành sẽ hiển thị. Nếu vẫn muốn thoát thì vào lại exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= ID процесса для оболочки
$ sleep 999 &
$ exit
There are running jobs.
[1]+  Running                 sleep 999 &
$ echo $$
68125             # <= ID процесса для оболочки тот же
$ exit
There are running jobs.
[1]+  Running                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= на этот раз ID процесса  изменился

Siêu năng lực thay thế

5.globstar

Tùy chọn này cung cấp cho bạn siêu năng lực thay thế! Nếu bạn nhập:

$ shopt -s globstar
$ ls **

sau đó shell sẽ hiển thị đệ quy tất cả các thư mục và thư mục con.

Kết hợp với direxpand Bạn có thể nhanh chóng xem mọi thứ thấp hơn trong hệ thống phân cấp:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

Tùy chọn này cho phép các tính năng thường được liên kết với biểu thức chính quy hơn. Đôi khi điều này rất hữu ích:

$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile

Ở đây các mẫu được đặt trong ngoặc đơn và được phân tách bằng thanh dọc. Dưới đây là các toán tử có sẵn:

? = khớp với XNUMX hoặc một lần xuất hiện của các mẫu đã cho ! = hiển thị mọi thứ không khớp với các mẫu đã cho * = không hoặc nhiều lần xuất hiện + = một hoặc nhiều lần xuất hiện @ = chính xác một lần xuất hiện

Bảo vệ tai nạn

7. xác minh lịch sử

Ban đầu có thể hơi đáng sợ khi sử dụng các lệnh khởi chạy nhanh từ lịch sử các chữ viết tắt !! и !$.

Lựa chọn histverify trước tiên cho phép bạn xem cách Bash diễn giải lệnh trước khi nó thực sự chạy:

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. Noclobber

Một lần nữa, để bảo vệ khỏi các tai nạn, cụ thể là khỏi việc ghi đè lên một tệp đã tồn tại bằng toán tử chuyển hướng (>). Đây có thể là một thảm họa nếu bạn không có bản sao lưu.

Lựa chọn set -С cấm ghi đè như vậy. Nếu cần, bạn có thể bỏ qua việc bảo vệ bằng cách sử dụng toán tử >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$

Nguồn: www.habr.com

Thêm một lời nhận xét