ตัวเลือก Bash บางตัวเป็นที่รู้จักกันดีและมักใช้ เช่น หลายๆ คนเขียนตอนต้นบท
ชุด -o xtrace
สำหรับการดีบัก
set -o ยกขึ้น
ออกโดยไม่ได้ตั้งใจหรือ
ชุด -o errunset
เพื่อออกหากไม่ได้ตั้งค่าตัวแปรที่เรียก
แต่มีตัวเลือกอื่น ๆ อีกมากมาย บางครั้งมีการอธิบายไว้ในมานาอย่างสับสนเกินไป ดังนั้นฉันจึงรวบรวมบางส่วนที่มีประโยชน์ที่สุดพร้อมคำอธิบายไว้ที่นี่
หมายเหตุ: Mac อาจมี bash เวอร์ชันเก่า (3.x แทนที่จะเป็น 4.x) ซึ่งตัวเลือกเหล่านี้อาจไม่พร้อมใช้งานทั้งหมด ในกรณีนี้ดู
set
หรือ shopt
?
มีสองวิธีในการตั้งค่าตัวเลือกทุบตี: จากสคริปต์หรือจากบรรทัดคำสั่ง คุณสามารถใช้คำสั่งในตัวได้ set
и shopt
. ทั้งสองเปลี่ยนพฤติกรรมของเชลล์ ทำสิ่งเดียวกันมาก (โดยมีอาร์กิวเมนต์ต่างกัน) แต่ต่างกันในสิ่งเหล่านั้น set
ได้รับการสืบทอดหรือยืมมาจากพารามิเตอร์ของเชลล์อื่น ๆ ในขณะที่พารามิเตอร์ shopt
สร้างขึ้นในทุบตี
หากคุณต้องการดูตัวเลือกปัจจุบัน ให้รัน:
$ set -o
$ shopt
เพื่อเปิดใช้งานตัวเลือกใน set
มีการใช้ไวยากรณ์แบบยาวหรือแบบสั้น:
$ set -o errunset
$ set -e
ผลก็เหมือนกัน
หากต้องการปิดใช้งานตัวเลือกนี้ คุณต้องใส่เครื่องหมายบวกแทนเครื่องหมายลบ:
$ set +e
ฉันจำไวยากรณ์นี้ไม่ได้มานานแล้วเพราะตรรกะดูเหมือนผิด (เครื่องหมายลบเปิดใช้งานตัวเลือก และเครื่องหมายบวกปิดใช้งาน)
В shopt
(มีเหตุผลมากกว่า) แฟล็กใช้เพื่อเปิดใช้งานและปิดใช้งานตัวเลือก -s
(ชุด) และ -u
(ไม่ได้ตั้งค่า):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
การเปลี่ยนไดเร็กทอรี
มีหลายตัวเลือกที่ช่วยให้คุณทำงานกับไดเร็กทอรีได้
1.ซีดีสะกด
ด้วยการตั้งค่านี้ bash จะเริ่มเข้าใจการพิมพ์ผิด และจะนำคุณไปยังโฟลเดอร์ที่คุณสะกดชื่อผิด
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
ฉันใช้ตัวเลือกนี้มาหลายปีแล้วและแทบไม่มีการตัดสินใจที่แปลกมาก (อาจจะปีละครั้ง) แต่วันอื่นๆ cdspell
ประหยัดเวลาอย่างแท้จริงทุกวัน
2. ออโต้ซีดี
หากคุณไม่เต็มใจที่จะยอมรับความไร้ประสิทธิภาพของหลายรายการ cd
จากนั้นคุณสามารถตั้งค่าตัวเลือกนี้ให้ย้ายไปยังโฟลเดอร์ X ได้หากไม่มีคำสั่ง X
$ shopt -s autocd
$ abcdefg
$ cd ..
เมื่อใช้ร่วมกับการเติมข้อความอัตโนมัติ คุณจะข้ามระหว่างโฟลเดอร์ต่างๆ ได้อย่างรวดเร็ว:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
อย่าเพิ่งตั้งชื่อโฟลเดอร์ rm -rf *
(ใช่แล้ว มันเป็นไปได้)
3.ขยายขอบเขต
นี่เป็นตัวเลือกที่ยอดเยี่ยมที่จะขยายตัวแปรสภาพแวดล้อมโดยการกด Tab:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
เอาต์พุตที่สะอาด
4.งานเช็ค
ตัวเลือกนี้จะหยุดออกจากระบบเซสชันหากยังมีงานที่ทำงานอยู่เบื้องหลัง
แทนที่จะออก รายการงานที่ยังไม่เสร็จจะปรากฏขึ้น หากคุณยังคงต้องการออกให้เข้าอีกครั้ง 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 процесса изменился
มหาอำนาจทดแทน
5.โกลบอลสตาร์
ตัวเลือกนี้ให้พลังพิเศษในการทดแทนแก่คุณ! หากคุณป้อน:
$ shopt -s globstar
$ ls **
จากนั้นเชลล์จะแสดงไดเร็กทอรีและไดเร็กทอรีย่อยทั้งหมดแบบวนซ้ำ
Всочетаниис direxpand
คุณสามารถดูทุกสิ่งที่ต่ำกว่าในลำดับชั้นได้อย่างรวดเร็ว:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
ตัวเลือกนี้จะเปิดใช้คุณลักษณะที่มักเกี่ยวข้องกับนิพจน์ทั่วไป บางครั้งสิ่งนี้ก็มีประโยชน์มาก:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
ต่อไปนี้รูปแบบจะอยู่ในวงเล็บและคั่นด้วยแถบแนวตั้ง นี่คือตัวดำเนินการที่ใช้ได้:
? = จับคู่ศูนย์หรือหนึ่งรายการของรูปแบบที่กำหนด ! = แสดงทุกอย่างที่ไม่ตรงกับรูปแบบที่กำหนด * = เกิดเหตุการณ์เป็นศูนย์หรือมากกว่า + = เกิดขึ้นอย่างน้อยหนึ่งเหตุการณ์ @ = เกิดขึ้นเพียงครั้งเดียว
คุ้มครองอุบัติเหตุ
7. ตรวจสอบประวัติ
ในตอนแรกอาจดูน่ากลัวเล็กน้อยหากใช้คำสั่งเปิดใช้ด่วนจากประวัติตัวย่อ !!
и !$
.
ตัวเลือก histverify
ให้คุณดูว่า Bash ตีความคำสั่งอย่างไรก่อนที่จะรันจริง:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. โนโคล็อบเบอร์
อีกครั้งเพื่อป้องกันอุบัติเหตุคือจากการเขียนทับไฟล์ที่มีอยู่แล้วด้วยตัวดำเนินการเปลี่ยนเส้นทาง (>
). นี่อาจเป็นหายนะหากคุณไม่มีข้อมูลสำรอง
ตัวเลือก set -С
ห้ามการเขียนทับดังกล่าว หากจำเป็น คุณสามารถเลี่ยงการป้องกันโดยใช้ตัวดำเนินการได้ >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
ที่มา: will.com