Score:8

เหตุใดนามแฝงที่ใช้ awk จึงไม่ส่งคืนการตอบสนองที่สะอาดเหมือนอีกสองรายการของฉัน

ธง cn

ฉันกำลังสร้างนามแฝงสำหรับเทอร์มินัลเพื่อส่งออกที่อยู่ IP ที่แตกต่างกัน สองในสามทำงานได้ดี แต่หนึ่งสำหรับเกตเวย์เริ่มต้นของฉันจะไม่ส่งคืนการตอบสนองที่สะอาด

alias inet="ชื่อโฮสต์ -I | awk '{พิมพ์ $3}'" 

ผลตอบแทน: 192.168.xxx.xx ตามที่ตั้งใจไว้

นามแฝง pubip="curl ifconfig.me"

ผลตอบแทน: 354.xxx.xx.xx ตามที่ตั้งใจไว้

อย่างไรก็ตาม นามแฝงที่ฉันสร้างขึ้นเพื่อส่งคืน ip เกตเวย์เริ่มต้น

นามแฝง def="ip r | grep เริ่มต้น | awk '{พิมพ์ $3}'"

ผลตอบแทน: ค่าเริ่มต้นผ่าน 192.168.xxx.xxx dev eth0

ฉันใช้บรรทัดเดียวกันในเทอร์มินัลและจะส่งคืนเพียงเกตเวย์เริ่มต้นตามที่ตั้งใจไว้

แต่เมื่อมันถูกจัดเก็บเป็นนามแฝงส่วน "awk" ของสคริปต์จะไม่ทำงาน

ฉันไม่สามารถไปป์สองครั้งในนามแฝงได้หรือไม่? มีอย่างอื่นผิดปกติในรหัสของฉันหรือไม่

Score:15
ธง cn
raj

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

นามแฝง def='ip r | grep เริ่มต้น | awk '\''{พิมพ์ }'\'''

และเนื่องจาก พิมพ์ คนเดียวใน อึดอัด, ทั้งบรรทัดที่ส่งคืนโดย เกรป ถูกพิมพ์

ใช้สิ่งต่อไปนี้เพื่อกำหนดนามแฝง:

นามแฝง def="ip r | grep เริ่มต้น | awk '{พิมพ์ \$3}'"

จากนั้นนามแฝงของคุณจะมีรูปแบบ:

นามแฝง def='ip r | grep เริ่มต้น | awk '\''{พิมพ์ $3}'\'''

และมันจะทำงานตามที่คุณต้องการ

JakobyScream avatar
cn flag
คุณชื่นชมอย่างมาก คำอธิบายทั้งหมดนั้นยอดเยี่ยมมาก ฉันไม่แน่ใจว่าจำเป็นต้องหลบหนีจากตัวละครบางตัวหรืออะไร แต่ตอนนี้มันใช้งานได้ตามที่ตั้งใจไว้ คุณมีวันที่ดี
us flag
คุณยังสามารถกำจัด grep: `alias def="ip r | awk '/default/ {print \$3}'""
cn flag
คุณยังสามารถกำหนดฟังก์ชันแทนนามแฝง และไม่ต้องกังวลกับสิ่งเหล่านี้
Hopping Bunny avatar
cn flag
หากเพียงแค่ได้รับเอาต์พุตเป็นเป้าหมาย (และไม่ได้ใช้ awk) คุณสามารถใช้คำสั่ง cut ง่ายๆ เช่น: `alias def="ip r|grep default|cut -d\" \" -f3"` `-d` กำหนด "ช่องว่าง" เป็นตัวคั่น และ `-f` ระบุฟิลด์ที่จะพิมพ์ จำเป็นต้องใช้เครื่องหมายแบ็กสแลชเนื่องจากเรากำลังรวมคำสั่งด้วยนามแฝงซึ่งมีเครื่องหมายคำพูดที่จุดเริ่มต้นและจุดสิ้นสุดอยู่แล้ว หากเราพิมพ์คำสั่งในเทอร์มินัล ก็ไม่จำเป็น

โพสต์คำตอบ

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