การทดแทนประวัติ Bash alias คล้ายกับ \! * ใน csh


3

คำถามของฉันคล้ายกับคำถามของ โพสต์เก่านี้ .

ฉันต้องการทำสิ่งที่คล้ายกัน: วางในนามแฝงอาร์กิวเมนต์สุดท้ายที่พิมพ์บนบรรทัดคำสั่งปัจจุบัน นี้จะเทียบเท่ากับ csh \!* ซึ่งสามารถใช้ในนามแฝง

อ้างอิงจากการอ้างอิงโพสต์ดูเหมือนว่าปัญหาคือการขยายประวัติของทุบตีซึ่งเป็นเหตุผลที่ใช้ fc แทน ความคิดจะให้การแทนที่ทำงานกลางสตริงของคำสั่งเช่น alias cat='cat -n !!:* && echo ""' (เป็นตัวอย่างแบบย่อซึ่งไม่ทำงานเนื่องจากปัญหาการขยาย)

อย่างไรก็ตามสิ่งนี้แตกต่างจากโพสต์อ้างอิงในแง่ที่ว่าฉันต้องการคว้าเฉพาะอาร์กิวเมนต์ที่อยู่เหนือคำสั่งแรก (เช่นในโพสต์พวกเขาคว้าทั้งบรรทัดแทนที่จะเป็นทั้งบรรทัดยกเว้นอาร์กิวเมนต์ zero-th คำสั่ง ตัวเอง)

วิธีที่ดีที่สุดในการทำเช่นนี้ในนามแฝงทุบตีคืออะไร? (หมายเหตุ: การค้นหาเพื่อเก็บสิ่งนี้เป็นนามแฝงไม่ใช่การค้นหาสคริปต์หรือฟังก์ชัน)


มีความแตกต่างใหญ่ระหว่างสคริปต์และฟังก์ชั่น ฟังก์ชั่นทุบตีอาศัยอยู่ในหน่วยความจำเช่นเดียวกับนามแฝง; ไม่มีเหตุผลที่จะไม่ใช้ที่นี่ การใช้การแทนที่ประวัติในนามแฝงของ csh เพื่อทำมากกว่าการแทนที่คำสั่งง่ายๆคือแฮ็กที่จำเป็นเพียงเพราะ csh ไม่มีรูทีนย่อยที่เหมาะสม
Mark Reed

คำตอบ:


2

ที่ดีที่สุดคือหลีกเลี่ยงนามแฝงสำหรับสิ่งอื่นที่ไม่ใช่การแทนที่คำสั่งเดียวที่ง่าย หากต้องการใช้อาร์กิวเมนต์คำสั่งหลายคำสั่ง ฯลฯ คุณสามารถกำหนด ฟังก์ชัน กำลังเข้าถึง พารามิเตอร์ เช่นเดียวกับที่คุณทำในสคริปต์:

foo() {
    do_this
    do_that "$1"
}

cat() { command cat "$@" && echo ""; }

(โดยปกติฟังก์ชั่นจะแทนที่ไฟล์ปฏิบัติการได้ดังนั้น command cat จำเป็นถ้าคุณต้องการข้ามฟังก์ชั่นและเรียกใช้ไฟล์ปฏิบัติการโดยตรง)


ขอบคุณ แต่ฉันได้เพิ่มการแก้ไข "(หมายเหตุ: การค้นหาเพื่อให้มันเป็นนามแฝงไม่ได้มองหาสคริปต์หรือฟังก์ชั่น) นามแฝงสามารถเป็นเครื่องมือที่ทรงพลังและ - แม้ว่าด้วยเหตุผลทางวิชาการเท่านั้น - ฉันต้องการดูสิ่งที่ต้องใช้เพื่อให้ได้ฟังก์ชันการทำงานที่เทียบเท่า (เช่นเทียบกับเชลล์อื่น ๆ เช่น csh) ในโทเค็นที่แยกต่างหากบางทีนี่อาจเป็นเพียงแค่ความแตกต่างของแนวคิดของการทุบตีเมื่อเทียบกับกระบวนทัศน์เชลล์อื่น ๆ
bossNova

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