ฉันสามารถทำการแยก bash stop และตรวจสอบความถูกต้องของ alias ได้หรือไม่?


8

ฉันใช้ Fedora 25 และเพิ่มนามแฝงต่อไปนี้ลงในโปรไฟล์ทุบตีของฉัน:

alias releasenotes="dnf updateinfo --refresh info `dnf check-update | cut -d '.' -f 1 | xargs` | less"

(ฉันไม่สามารถใช้งานแบบตรงได้dnf updateinfo infoเนื่องจากhttps://bugzilla.redhat.com/show_bug.cgi?id=1405191 )

นามแฝงของฉันใช้งานได้ แต่คำสั่งใช้เวลาประมาณ 10 วินาทีในการรันและเนื่องจาก bash parses และตรวจสอบนามแฝงทั้งหมดเมื่อโปรไฟล์มีแหล่งที่มา มันน่ารำคาญ

มีวิธีใดบ้างที่จะทำการทุบตีไม่พยายามแยกวิเคราะห์และตรวจสอบนามแฝง - หรือแค่นั้น?

คำตอบ:


9

การคาดเดาที่ดีที่สุดของฉันคือคุณควรใช้อัญประกาศล้อมรอบคำจำกัดความของนามแฝง

ฉันรู้ว่าเมื่อใช้เครื่องหมายคำพูดคู่ตัวแปรเชลล์จะถูกแทนที่ด้วยเนื้อหาของพวกเขาที่ขั้นตอนการกำหนดนามแฝง (เช่นที่คุณพูดว่าการแยกวิเคราะห์และตรวจสอบ) และ backticks หรือการทดแทนเชลล์เช่น $ (คำสั่ง)

คำอธิบายที่ดีกว่าอยู่ในคำถาม Unix SEนี้!

หากไม่ได้ช่วยให้โหลดพรอมต์เร็วขึ้นอีกให้กำหนดฟังก์ชันเชลล์แทนนามแฝง

แก้ไข: อย่าลืมเปลี่ยนอาร์กิวเมนต์การตัดเป็นเครื่องหมายคำพูดคู่ตามที่ระบุไว้


นั่นมัน! คุณตอบก่อนเพื่อรับเครดิต
iLikeDirt

9

bashกำลังตีความสตริงที่ยกมาของคุณและการตีความนั้นดำเนินการdnf check-updateคำสั่งที่ฝังตัว การดำเนินการนี้เป็นสิ่งที่ต้องใช้เวลาในระหว่างการกำหนดนามแฝงไม่ใช่dnf updateinfoคำสั่งหลักที่คุณใช้นามแฝง ลองตัวอย่างที่ประดิษฐ์ขึ้นมาsleepและสังเกตว่าaliasตัวมันเองใช้เวลา 5 วินาที:

alias sleep5="echo 'wake' ; `sleep 5` ; echo 'done'"

ใช้เครื่องหมายคำพูดเดี่ยวเพื่อหลีกเลี่ยงการตีความ:

alias releasenotes='dnf updateinfo --refresh info `dnf check-update | cut -d "." -f 1 | xargs` | less'

อย่าลืมสลับcutอาร์กิวเมนต์เป็นเครื่องหมายคำพูดคู่

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