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
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ề 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