บางครั้งฉันกำหนดฟังก์ชั่นที่ให้เงาของไฟล์ที่ปฏิบัติการได้และปรับแต่งอาร์กิวเมนต์หรือเอาต์พุตของมัน ดังนั้นฟังก์ชั่นจึงมีชื่อเดียวกับไฟล์ที่เรียกใช้งานได้และฉันต้องการวิธีเรียกใช้ไฟล์ที่เรียกใช้จากฟังก์ชันโดยไม่ต้องเรียกใช้ฟังก์ชันซ้ำ ตัวอย่างเช่นเมื่อต้องการเรียกใช้ผลลัพธ์ของการfossil diff
ผ่านcolordiff
และless -R
ฉันใช้:
function fossil () {
local EX=$(which fossil)
if [ -z "$EX" ] ; then
echo "Unable to find 'fossil' executable." >&2
return 1
fi
if [ -t 1 ] && [ "$1" == "diff" ] ; then
"$EX" "$@" | colordiff | less -R
return
fi
"$EX" "$@"
}
หากฉันแน่ใจเกี่ยวกับตำแหน่งของไฟล์ที่รันได้ฉันก็พิมพ์/usr/bin/fossil
ได้ Bash รู้ว่านั่น/
หมายถึงคำสั่งมันเป็นไฟล์เรียกทำงานไม่ใช่ฟังก์ชั่น แต่เนื่องจากฉันไม่ทราบตำแหน่งที่แน่นอนฉันจึงต้องหันไปใช้โทรศัพท์which
และตรวจสอบผลลัพธ์ มีวิธีที่ง่ายกว่านี้ไหม?
/
หมายถึงคำสั่งนั้นเป็นไฟล์ปฏิบัติการไม่ใช่ฟังก์ชั่น" พูดอย่างเคร่งครัดนั่นไม่ใช่ความจริง ในสิ่งที่ฉันเชื่อว่าเป็นการตัดสินใจที่น่ากลัว (และไม่มีเอกสาร) การออกแบบทุบตีอนุญาตให้ชื่อฟังก์ชันประกอบด้วยเครื่องหมายทับ เครื่องหมายทับ/usr/bin/fossil
จะทำให้สตริงแตกต่างจากfossil
ดังนั้นเมื่อคุณพูด/usr/bin/fossil
มันจะไม่พยายามเรียกใช้fossil
ฟังก์ชัน