मैंने एक शेल फ़ंक्शन को परिभाषित किया (चलो इसे कॉल करें clock
), जिसे मैं time
फ़ंक्शन के समान, दूसरे कमांड के लिए एक आवरण के रूप में उपयोग करना चाहता हूं clock ls -R
।
मेरा शेल फ़ंक्शन कुछ कार्य करता है और फिर समाप्त होता है exec "$@"
।
मैं इस फ़ंक्शन को शेल बिल्ट-इन के साथ भी काम करना चाहता हूं, जैसे कि बिल्ट-इन clock time ls -R
का परिणाम आउटपुट करना चाहिए time
, और /usr/bin/time
निष्पादन योग्य नहीं । लेकिन exec
हमेशा इसके बजाय कमांड चलाना समाप्त करता है।
मैं अपने बैश फ़ंक्शन को एक रैपर के रूप में कैसे काम कर सकता हूं जो शेल बिल्ट-इन को तर्कों के रूप में भी स्वीकार करता है?
संपादित करें : मैंने अभी सीखा कि time
बैश बिल्ट-इन नहीं है, बल्कि पाइपलाइनों से संबंधित एक विशेष आरक्षित शब्द है । मैं अभी भी बिल्ट-इन के लिए एक समाधान में दिलचस्पी रखता हूं, भले ही इसके साथ काम न करें time
, लेकिन एक अधिक सामान्य समाधान भी बेहतर होगा।
exec bash -c \' "$@" \'
। जब तक पहले पैरामीटर में आपकी कमांड शेल स्क्रिप्ट के रूप में मान्यता प्राप्त है, तब इसे सीधे चलाने के लिए द्विआधारी के रूप में व्याख्या की जाएगी। वैकल्पिक रूप से, और अधिक सरल रूप से, बस अपने मूल शेल से यादexec
करें और कॉल करें"@"
।