“ [[$ -! = * i *]] && return” หมายความว่าอะไร


22

ฉันมีบรรทัดนี้ในของฉัน.bashrcและฉันต้องการที่จะรู้ว่าสิ่งนี้หมายถึงอะไร

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

คำตอบ:


33
  • $- หมายถึง 'ธงปัจจุบัน'
  • echo $-ส่งคืน "himBH" นั่นคือค่าเริ่มต้นทั้งหมด
  • ดังนั้น ... [[ $- != *i* ]] && returnจริง ๆ แล้วสิ่งที่กล่าวข้างต้นในข้อคิดเห็น: ตรวจสอบว่ามีการตั้งค่าสถานะการโต้ตอบ [[และ]] ทำให้มันเป็นบูลีนดังนั้นมันจึงกลายเป็น "จริง" หรือ "เท็จ" "false && return" ทำให้ดำเนินต่อไป "true && return" ทำให้ดำเนินการส่งคืน

ธงเริ่มต้นอธิบายในรายละเอียดเพิ่มเติม:

h ใช้สำหรับ "hash all": เป็นการบอก bash ให้จดจำตำแหน่งของคำสั่งที่พบผ่านการสอบถาม PATH ของคุณ

ฉันใช้สำหรับ "แบบโต้ตอบ": ป้อนอินพุตและรับเอาต์พุตกลับ

m ใช้สำหรับ "มอนิเตอร์": เป็นการควบคุมงาน

B สำหรับ "รั้งขยาย" สิ่งนี้ช่วยให้คุณใช้การขยายรั้ง

H ใช้สำหรับ "การขยายประวัติ" นี่คือสิ่งที่ช่วยให้คุณสามารถรันคำสั่งอีกครั้งจากประวัติของคุณโดยการใส่หมายเลขของมันล่วงหน้าด้วยเครื่องหมายอัศเจรีย์


ยังไงซะ. ฉันมี ...

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

โดยทั่วไปแล้วฉันจะถือว่าเหมือนกัน แต่อ่านง่ายกว่า


6

โดยทั่วไปหมายถึง "ถ้าแฟล็กเชลล์ไม่มีตัวพิมพ์เล็ก i ให้หยุดการทำงาน / สคริปต์ที่นี่"

[[ ]]

หมายถึงการแสดงออกตามเงื่อนไขในทุบตี

$-

หมายถึงธงเปลือก มันจะมี "i" ถ้าเชลล์เป็นแบบโต้ตอบ (เช่น. คุณสามารถพิมพ์คำสั่งซึ่งตรงข้ามกับมันกำลังรันสคริปต์)

!=

ก็หมายความว่า "ไม่เท่ากับ"

*i*

เป็นรูปแบบไวด์การ์ดที่ตรงกับสิ่งที่มี "i"

return

ไม่มีข้อโต้แย้งใด ๆ เพียงแค่หมายถึงหยุดการดำเนินการของฟังก์ชั่นปัจจุบันหรือสคริปต์

&&

เป็นตรรกะและผู้ประกอบการ การแสดงออกทางด้านขวาในกรณีนี้returnจะได้รับการประเมินผล (ดำเนินการ) ถ้าการแสดงออกทางด้านซ้ายที่เป็นจริง ดังนั้นในภาษาการเขียนโปรแกรมหลาย ๆ ภาษานั้นa && bเป็นสิ่งที่จดย่อif a then b- นี่เรียกว่า "การประเมินการลัดวงจร" และมันทำให้ครูการเขียนโปรแกรมใช้งานอย่างบ้าคลั่งเมื่อคุณใช้มัน: D


2

ฉันจะสมมติว่ามันเหมือนว่า: ถ้าทุบตีไม่ได้เปิดในเชลล์แบบโต้ตอบแล้วไม่ทำอะไรเลย

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


ขอบคุณ :) แต่ฉันกำลังมองไปข้างหน้าจะรู้ว่าเป็นสิ่งที่$-และ*i*และวิธีการที่ไม่ได้หาว่าโหมดโต้ตอบหรือไม่
เซเวอร์รัส Tux

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.