ตัวเลือก Bash ที่รู้จักกันน้อยแปดตัว

ตัวเลือก 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

เพิ่มความคิดเห็น