คุณทำเช่นนี้ในลักษณะเดียวกับการตั้งชื่อแทนคุณ
alias git-go='git commit -m "init "; git push; git status'
สถานการณ์ที่มันยุ่งยากหากไม่ใช่นามแฝงที่รันคำสั่งและส่งอาร์กิวเมนต์ไปยังคำสั่งนั้นหรือแม้กระทั่งเมื่อนามแฝงรันคำสั่งหลายคำสั่งคั่นด้วย;
แต่แทนที่จะเป็นเมื่อคุณต้องการให้นามแฝงยอมรับและใช้อาร์กิวเมนต์บรรทัดคำสั่งของตัวเอง .
ตัวอย่างเช่นสิ่งที่คุณเขียนหลังจากชื่อของนามแฝงว่าจะถูกวางลงบนปลายและทำให้ผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่งที่สามคำสั่งหลังจากgit
git status
(จริงๆแล้วมันไม่ได้มากที่ข้อความต่อไปนี้จะถูกวางลงบนจุดสิ้นสุดเท่าที่มันเป็นข้อความที่เหลืออยู่คนเดียวและชื่อนามแฝงจะถูกแทนที่ด้วยคำนิยามของมัน)
ดังนั้นคุณสามารถเรียกใช้นามแฝงของคุณโดยไม่มีข้อโต้แย้งซึ่งใช้งานได้และคำสั่งสุดท้ายคือgit status
:
git-go
git status
หรือคุณสามารถเรียกใช้มันมีข้อโต้แย้งที่คุณต้องการส่งผ่านไปยัง ตัวอย่างเช่นเมื่อคุณรันด้วยวิธีนี้คำสั่งสุดท้ายคือgit-status --show-stash
:
git-go --show-stash
สิ่งที่คุณไม่สามารถทำได้กับนามแฝงใน Bash (และเชลล์สไตล์บอร์นอื่น ๆ ) คือการทำให้นามแฝงยอมรับอาร์กิวเมนต์บรรทัดคำสั่งและวางไว้ที่อื่นนอกเหนือจากจุดสิ้นสุด
ตัวอย่างเช่นสมมติว่าคุณต้องการgit-go
ยอมรับอาร์กิวเมนต์ที่ใช้สำหรับข้อความยืนยัน คุณจะไม่สามารถเขียนสิ่งนี้เป็นนามแฝงได้ วิธีแก้ปัญหาคือเขียนเป็นฟังก์ชันเชลล์แทน:
git-go() { git commit -m "$1"; git push; git status; }
ในความหมายของฟังก์ชั่นเปลือกที่พารามิเตอร์ตำแหน่ง$1
, $2
และอื่น ๆ เก็บค่าของอาร์กิวเมนต์บรรทัดคำสั่งที่ส่งไปยังฟังก์ชั่นเปลือก นามแฝงไม่มีฟังก์ชันการทำงานที่สอดคล้องกับสิ่งนี้เนื่องจากการขยายนามแฝงเป็นรูปแบบของการประมวลผลแมโครที่เกิดขึ้นเร็วมากเมื่อเชลล์แยกวิเคราะห์คำสั่ง
คุณสามารถของหลักสูตรเขียนเป็นฟังก์ชั่นเชลล์แม้ว่าคุณจะไม่จำเป็นต้องใช้พารามิเตอร์ตำแหน่งในความหมายที่เป็นVideonauth แสดงให้เห็น