นามแฝงหนึ่งส่งผลกระทบต่อนามแฝงอื่นหรือไม่


14

ฉันยังไม่ได้ตั้งชื่อแทนจำนวนมากในไฟล์. bash_aliases ของฉัน ฉันเพิ่งค้นพบว่ามีประโยชน์เพียงใด

ฉันเห็นว่าตัวเองค่อนข้างติดใจนามแฝงดังนั้นก่อนที่ไฟล์จะเทอะทะเกินไปฉันอยากจะอธิบายอะไรบางอย่างโดยถามคำถามง่าย ๆ นามแฝงหนึ่งส่งผลกระทบต่ออีกชื่อหนึ่งหรือนามแฝงกลับไปเป็นคำสั่งเดิมเสมอหรือไม่?

ตัวอย่างอาจทำให้ชัดเจนมากขึ้น:

ฉันได้นามแฝงls ls -lFสมมติว่าผมอยากจะยังนามแฝงdเพื่อls -l | grep -E "^d": ไม่dตอนนี้ใช้ls -lFในสถานที่ของls? ถ้าเป็นเช่นนั้นมันเป็นเรื่องของการสั่งซื้อในไฟล์การกำหนดค่า. bash_aliases หรือไม่?

man alias ไม่ได้สอนฉัน

คำตอบ:


20

จากนามแฝง (ส่วนที่ 6.6 ของคู่มือ Bash) :

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

สิ่งนี้จะเกิดขึ้นเมื่อคุณใช้นามแฝงไม่ใช่เมื่อคุณกำหนด นี่คือตัวอย่าง:

$ alias a1='a2 hello'
$ alias a2='echo'
$ a1
hello
$ unalias a2
$ a1
bash: a2: command not found

1
เยี่ยมมากขอบคุณสำหรับตัวอย่างนั้น (และสำหรับลิงก์ไปยังคู่มือ Bash ด้วย) ฉันอ้างอิงจาก Manual: "กฎที่เกี่ยวข้องกับคำจำกัดความและการใช้นามแฝงค่อนข้างสับสน ... เกือบทุกจุดประสงค์ฟังก์ชันเชลล์เป็นที่นิยมมากกว่านามแฝง" ฉันเดาว่าฉันควรเรียนรู้วิธีการทำงานของเชลล์แล้ว :)
boehj

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

@Caleb @Gilles - ขอบคุณมาก ๆ BTW, ls = 'ls --color' ฉันเห็นว่ามีประโยชน์มาก รักเว็บไซต์นี้ :)
boehj

2
@boehj: กฎง่ายๆคือการใช้นามแฝงเมื่อคุณต้องการที่จะมีข้อโต้แย้งอัตโนมัติคำสั่งโดยใช้ชื่อของคำสั่งหรือรูปแบบย่อยและฟังก์ชั่นอื่น ๆ ดังนั้นalias ls='ls --color', alias cp='cp -i'แต่ฟังก์ชั่นสำหรับสิ่งที่ซับซ้อนมากขึ้น โดยเฉพาะอย่างยิ่งฉันต้องการให้คุณฟังก์ชั่นเพื่อให้คุณสามารถส่งข้อโต้แย้ง d [ความคิดเห็นโพสต์ใหม่เพื่อแก้ไข braino สับสนขอบคุณ @cjm]ls
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

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