कभी-कभी मैं एक फ़ंक्शन को परिभाषित करता हूं जो एक निष्पादन योग्य को छाया देता है और इसके तर्कों या आउटपुट को ट्विस्ट करता है। इसलिए फ़ंक्शन का निष्पादन योग्य नाम समान है, और मुझे फ़ंक्शन को मुख्य रूप से कॉल किए बिना फ़ंक्शन से निष्पादन योग्य चलाने का तरीका चाहिए। उदाहरण के लिए, के 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। बैश पहचानता है कि /कमांड का अर्थ है यह एक निष्पादन योग्य है, एक फ़ंक्शन नहीं। लेकिन जब से मुझे सटीक स्थान नहीं पता है, मुझे कॉल करने whichऔर परिणाम की जांच करने का सहारा लेना होगा । क्या कोई सरल तरीका है?
/कमांड एक निष्पादन योग्य है, एक फ़ंक्शन नहीं है।" कड़े शब्दों में, यह सच नहीं है। में जो मैं एक भयानक (और undocumented) डिजाइन निर्णय मानता हूं, बैश फ़ंक्शन नामों को स्लैश को शामिल करने की अनुमति देता है। स्लैश बस का कारण/usr/bin/fossilएक अलग होने की स्ट्रिंग सेfossil, इसलिए, जब आप कहते हैं/usr/bin/fossil, इसे चलाने के लिए कोशिश नहीं करताfossilसमारोह।