ตัวแปร Bash ที่ไม่คาดคิดเจ็ดตัว

ต่อเนื่องชุดบันทึกเกี่ยวกับ รู้จักน้อยกว่า ฟังก์ชั่น ทุบตี ฉันจะแสดงให้คุณเห็นตัวแปรเจ็ดตัวที่คุณอาจไม่รู้

1) PROMPT_COMMAND

คุณอาจทราบวิธีจัดการพรอมต์เพื่อแสดงข้อมูลที่เป็นประโยชน์ต่างๆ อยู่แล้ว แต่ไม่ใช่ทุกคนที่รู้ว่าคุณสามารถรันคำสั่งเชลล์ได้ทุกครั้งที่แสดงพรอมต์

ในความเป็นจริง โปรแกรมจัดการพรอมต์ที่ซับซ้อนจำนวนมากใช้ตัวแปรนี้เพื่อรันคำสั่งเพื่อรวบรวมข้อมูลที่แสดงในพรอมต์

ลองรันสิ่งนี้ในเชลล์ใหม่และดูว่าเกิดอะไรขึ้นกับเซสชัน:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

ถ้าคุณวิ่ง history ในคอนโซล คุณจะได้รับรายการคำสั่งที่ดำเนินการก่อนหน้านี้ภายใต้บัญชีของคุณ

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

เมื่อตั้งค่าตัวแปรนี้แล้ว รายการใหม่จะบันทึกเวลาพร้อมกับคำสั่ง ดังนั้นเอาต์พุตจะมีลักษณะดังนี้:

1871 ฉันวิ่งไปที่: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 ฉันวิ่งไปที่: 01/05/19 13:38:19 curl bbc.co.uk 1873 ฉันวิ่งสิ่งนี้ที่ : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 ฉันวิ่งสิ่งนี้ที่: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 ฉันวิ่งสิ่งนี้ที่: 01 /05/19 13:39:25 ซูโดะ ซู -

การจัดรูปแบบตรงกับอักขระจาก man date.

3) CDPATH

เพื่อประหยัดเวลาในบรรทัดคำสั่ง คุณสามารถใช้ตัวแปรนี้เพื่อเปลี่ยนไดเร็กทอรีได้อย่างง่ายดายเหมือนกับที่คุณออกคำสั่ง

ในขณะที่ PATH, ตัวแปร CDPATH เป็นรายการเส้นทางที่คั่นด้วยโคลอน เมื่อคุณรันคำสั่ง cd ด้วยเส้นทางสัมพัทธ์ (เช่น ไม่มีเครื่องหมายทับนำหน้า) โดยค่าเริ่มต้น เชลล์จะค้นหาชื่อที่ตรงกันในโฟลเดอร์ในเครื่องของคุณ CDPATH จะค้นหาเส้นทางที่คุณให้ไว้สำหรับไดเร็กทอรีที่คุณต้องการไป

หากคุณติดตั้ง CDPATH ด้วยวิธีนี้:

$ CDPATH=/:/lib

แล้วป้อน:

$ cd /home
$ cd tmp

แล้วคุณก็จะเข้าไปอยู่ในนั้นเสมอ /tmp ไม่ว่าคุณจะอยู่ที่ไหน

อย่างไรก็ตาม โปรดใช้ความระมัดระวัง เนื่องจากหากคุณไม่ได้ระบุรายการในเครื่องในรายการ (.) คุณจะไม่สามารถสร้างโฟลเดอร์อื่นได้อีก tmp และไปที่มันตามปกติ:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

อ๊ะ!

สิ่งนี้คล้ายกับความสับสนที่ฉันรู้สึกเมื่อรู้ว่าโฟลเดอร์ในเครื่องไม่รวมอยู่ในตัวแปรที่คุ้นเคยมากกว่า PATH... แต่คุณต้องทำในตัวแปร PATH ของคุณ เพราะคุณอาจถูกหลอกให้รันคำสั่งปลอมจากโค้ดที่ดาวน์โหลดมาบางโค้ด

ของฉันถูกกำหนดโดยจุดเริ่มต้น:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

คุณเคยสงสัยไหมว่าการพิมพ์ exit มันจะนำคุณออกจาก bash shell ปัจจุบันของคุณไปยังเชลล์ "พาเรนต์" อื่นหรือจะปิดหน้าต่างคอนโซลทั้งหมดหรือไม่

ตัวแปรนี้จะติดตามว่าคุณซ้อนกันลึกแค่ไหนใน bash shell หากคุณสร้างเทอร์มินัลใหม่ จะถูกตั้งค่าเป็น 1:

$ echo $SHLVL
1

จากนั้น หากคุณเริ่มกระบวนการเชลล์อื่น จำนวนจะเพิ่มขึ้น:

$ bash
$ echo $SHLVL
2

สิ่งนี้มีประโยชน์มากในสคริปต์ที่คุณไม่แน่ใจว่าจะออกหรือไม่ หรือติดตามตำแหน่งที่คุณซ้อนกัน

5) LINENO

ตัวแปรยังมีประโยชน์สำหรับการวิเคราะห์สถานะปัจจุบันและการดีบัก LINENOซึ่งรายงานจำนวนคำสั่งที่ดำเนินการในเซสชันจนถึงตอนนี้:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

สิ่งนี้มักใช้เมื่อทำการดีบักสคริปต์ การแทรกบรรทัดเช่น echo DEBUG:$LINENOคุณสามารถระบุได้อย่างรวดเร็วว่าคุณอยู่ที่ไหนในสคริปต์ (หรือไม่)

6) REPLY

เช่นฉัน คุณมักจะเขียนโค้ดดังนี้:

$ read input
echo do something with $input

อาจเป็นเรื่องที่น่าแปลกใจที่คุณไม่ต้องกังวลกับการสร้างตัวแปรเลย:

$ read
echo do something with $REPLY

สิ่งนี้ทำสิ่งเดียวกัน

7) TMOUT

เพื่อหลีกเลี่ยงการอยู่บนเซิร์ฟเวอร์ที่ใช้งานจริงนานเกินไปด้วยเหตุผลด้านความปลอดภัยหรือใช้งานสิ่งที่เป็นอันตรายในเทอร์มินัลที่ไม่ถูกต้องโดยไม่ได้ตั้งใจ การตั้งค่าตัวแปรนี้จะทำหน้าที่เป็นการป้องกัน

หากไม่มีสิ่งใดถูกป้อนเป็นเวลาตามจำนวนวินาทีที่กำหนด เชลล์จะออก

นั่นคือนี่เป็นอีกทางเลือกหนึ่ง sleep 1 && exit:

$ TMOUT=1

ที่มา: will.com

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