เรียกใช้คำสั่งอื่นก่อนเรียกใช้คำสั่งที่ผู้ใช้ต้องการเรียกใช้


9

สมมติว่าฉันต้องการแก้ไขพฤติกรรมดั้งเดิมของlsเครื่องมือด้วยวิธีนี้:

$ ls
Hello World
file1 file2 ...

ฉันจะทำสิ่งนี้ได้อย่างไร

เมื่อเรียกใช้ผมอยากจะเรียกใช้คำสั่งอื่นพูดให้ของlsecho "Hello World!"

วิธีแก้ปัญหาอย่างรวดเร็วที่ฉันเห็นใช้นามแฝง:

alias orig_ls="ls"
alias ls='echo "Hello World!"'

แต่นี้ไม่ได้เป็นทางออกที่แท้จริงตั้งแต่เมื่อฉันจะทำงานมันจะเอาท์พุทorig_ls"Hello World!"


ใส่ ls อื่นลงในพา ธ ของผู้ใช้และใช้สิ่งนี้เพื่อขอต้นฉบับ
peterh - Reinstate Monica

คำตอบ:


12

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

ในไฟล์บางไฟล์ที่มาเมื่อเชลล์ของคุณเริ่มต้น (เช่น.bashrc) ให้เพิ่มฟังก์ชั่นต่อไปนี้:

ls () {
    echo "Hello world!"
    command ls "$@"
}

ฟังก์ชั่นสามารถเรียกเก็บเงินคืนได้ นั่นเป็นเหตุผลที่command lsถูกนำมาใช้แทนls; มันบอกให้เชลล์ของคุณใช้งานจริงlsแทนที่จะเป็นฟังก์ชั่นที่คุณเพิ่งกำหนด


2
จริง วิธีนี้แก้ปัญหาได้ดีกว่า +1
PythonNut

อะไรคือcommandทางเลือกสำหรับ OS X?
IonicăBizău

@ IonicăBizăuฉันไม่มีความคิดcommandไม่ทำงาน: / ฉันไม่มีความคิดและฉันไม่มี Mac ที่ใช้ในการทดสอบขออภัย
undergroundmonorail

9

คุณต้องไม่ลืมโทรls:

alias ls='echo "Hello World!"; ls'

ฮา! ฉันคิดว่านี่จะสร้างวัฏจักรไม่สิ้นสุด! แต่ทำไมมันไม่สร้างวงวนไม่สิ้นสุด
IonicăBizău

1
คุณอาจลองใช้นามแฝงแทน echo "Hello World!"; / usr / bin / ls '
jamesqf

5
@ IonicăBizău "กฎการขยายนามแฝง" ที่ได้รับจะใช้เพียงครั้งเดียว
David Z

จะเข้าร่วมทั้งสองกับ & ยังทำงานหรือไม่ นั่นจะช่วยให้มั่นใจได้ว่าคำสั่งของผู้ใช้นั้นจะทำงานเฉพาะเมื่อ Custom Custom ทำงานใช่ไหม?
คดีของกองทุนโมนิกา

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