วิธีการดูคำสั่งที่แนบมากับนามแฝงทุบตี?


324

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

คำตอบ:


431

typebuiltin เป็นประโยชน์สำหรับการนี้ มันจะไม่เพียง แต่บอกคุณเกี่ยวกับนามแฝงเท่านั้น แต่ยังรวมถึงฟังก์ชันบิวด์อินคำสำคัญและคำสั่งภายนอก

$ type ls
ls is aliased to `ls --color=auto'
$ type rm
rm is /bin/rm
$ type cd
cd is a shell builtin
$ type psgrep
psgrep is a function
psgrep () 
{ 
    ps -ef | { 
        read -r;
        printf '%s\n' "$REPLY";
        grep --color=auto "$@"
    }
}

type -a cmdจะแสดงคำสั่งทั้งหมดโดยใช้ชื่อว่าในลำดับความสำคัญซึ่งจะเป็นประโยชน์สำหรับนามแฝงดังกล่าวข้างต้นที่ชื่อแทนตัวเองโทรlsls

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

นี้จะบอกคุณว่าเมื่อคุณทำงานls, /bin/lsจะถูกนำมาใช้และ--color=autoจะถูกรวมอยู่ในรายชื่อของข้อโต้แย้งที่นอกเหนือไปจากอื่น ๆ ที่คุณเพิ่มตัวเอง


จะทำอย่างไรเมื่อนามแฝงมีชื่อแทนมากขึ้น
user251046

2
@ user251046 ให้ใช้typeจนกว่าคุณจะตีอย่างอื่นที่ไม่ใช่นามแฝง ...
geirha

ฉันชอบคำตอบนี้เพราะtypeจะแยก / ตีความคำพูดใด ๆ เพื่อให้คุณมั่นใจได้ว่าคำพูดนั้นถูกต้อง
wisbucky

ฉันได้รับls is aliased to 'ls --color=auto'แต่ฉันจะเพิ่มเลเยอร์ให้ลึกลงได้อย่างไรเพื่อดูว่ามันใช้ / bin / ls หรือ / usr / local / bin / ls หรืออะไร
krubo

1
@krubo type -a lsจะแสดงคำสั่ง ls ทั้งหมดตามลำดับที่ต้องการ แล้วแต่จำนวนใดจะต่ำกว่านามแฝงคือสิ่งที่จะถูกดำเนินการโดยนามแฝง
geirha

163

เพียงพิมพ์aliasในขณะที่พร้อมท์เชลล์ มันควรส่งออกรายการของนามแฝงที่ใช้งานอยู่ในปัจจุบันทั้งหมด

หรือคุณสามารถพิมพ์alias [command]เพื่อดูว่านามแฝงที่เฉพาะเจาะจงใช้นามแฝงเป็นตัวอย่างถ้าคุณต้องการที่จะหาสิ่งที่นามแฝงถูกนามแฝงคุณสามารถทำlsalias ls


12
หรือพิมพ์alias lsเพื่อค้นหาว่าlsมีการใช้นามแฝงเป็นอย่างไร
poolie

2
@poolie แน่นอน ฉันคิดว่าคำถามคือเห็นนามแฝงทั้งหมดซึ่งเป็นสาเหตุที่ฉันไม่ได้อธิบายเพิ่มเติมเกี่ยวกับคำสั่ง alias
Thomas Ward

ขณะนี้ใช้งานได้กับนามแฝง แต่จะไม่ทำงานหากคุณได้กำหนดฟังก์ชันเชลล์แบบกำหนดเอง typeอย่างไรก็ตามทำงานได้ทั้งสองกรณี
Sujay Phadke

53

ฉันชอบCtrl+ Alt+ Eมากฉันเรียนรู้จากคำตอบนี้ มัน "ขยาย" บรรทัดคำสั่งที่พิมพ์ในปัจจุบันซึ่งหมายความว่ามันจะทำการขยายนามแฝง (เหนือสิ่งอื่นใด)

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

ตัวอย่างเช่นถ้าฉันพิมพ์:

$ ls

จากนั้นกดCtrl+ Alt+ Eมันจะกลายเป็น

$ ls --time-style=locale --color=auto

มีสิ่งนี้เทียบเท่ากับ distros อื่น ๆ ?
sepehr

@sepehr ทำงานบนเดเบียนฉันคิดว่ามันเป็นคุณสมบัติทุบตีและควรทำงานกับการกระจายใด ๆ
Der Hochstapler

4
คุณพูดถูกมันใช้ได้กับทุบตี แต่ฉันมี zsh และมันใช้งานไม่ได้
sepehr

มีประโยชน์จริง ๆ ฉันมีเป้าหมายที่แตกต่างกันในการขยายหนึ่งในคำสั่ง bash ก่อนหน้านี้ที่บันทึกไว้ในประวัติด้วยเช่น! 394 เพื่อให้ฉันสามารถแก้ไขได้ก่อนที่จะดำเนินการ
XXL

1
มันมีหนึ่งข้อแม้ เมื่อชื่อแทนประกอบด้วยคำพูดที่จำเป็นพวกเขาจะถูกลบออก ดังนั้นฉันได้รับsqueue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R แทนsqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh

10

คำตอบที่ถูกต้องพูดอย่างเคร่งครัดคือการใช้อาร์เรย์ BASH_ALIASES เช่น:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars

2
ฉันพบว่ามีประโยชน์ในสถานการณ์ที่ฉันต้องการให้โปรแกรมเข้าถึงคำแถลงที่แท้จริงโดยไม่มีนามแฝงโดยไม่มีสิ่งที่เป็นประโยชน์ต่อมนุษย์
M. Justin

นี่ไม่ทำงานใน zsh
ProGrammar

1
@ProGrammar คำถามเกี่ยวกับ bash - สำหรับ zsh คุณควรดูคำถามเกี่ยวกับ zsh
noonex

1
การเล่นชนิดหนึ่ง สิ่งที่ฉันต้องการอย่างแน่นอนเช่นเดียวกับ @ M.Justin - ฉันต้องการสแต็กสวิตช์เพิ่มเติมบนlsนามแฝงปัจจุบันโดยไม่แก้ไขสิ่งที่มี ดังนั้นฉันจะไปalias ls="${BASH_ALIASES[ls]} --time-style=iso"สำหรับกรณีของฉัน
รวย

2

คุณสามารถใช้whichคำสั่ง

หากคุณตั้งชื่อแทนlsเป็นls -alแล้วพิมพ์which lsคุณจะเห็น:

ls: aliased to ls -al.


bash ไม่มีwhichคำสั่ง
geirha

ไม่ทำงานกับฉัน ..
Chiel ten Brinke

2
whichเป็นวิธีที่ไม่ดีในการค้นหาชื่อแทนตามที่อธิบายไว้ที่นี่: unix.stackexchange.com/questions/10525/ … มันไม่ได้ผลสำหรับฉันสำหรับ alias ในทุบตีบน Ubuntu
Sujay Phadke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.