मुझे लगता है कि जब आप फ़ंक्शन में तर्क पारित कर रहे हैं तो यह केवल एक उद्धरण मुद्दा है।
इसे कॉल करने का प्रयास करें:
$ special_execute "echo 'abc'"
'abc'
यदि आप चारों ओर एकल उद्धरण नहीं चाहते हैं, abc
तो इस तरह से उद्धरण बदलें:
$ special_execute "echo abc"
abc
डिबगिंग
आप फ़ंक्शन के इंटर्नल्स को लपेट सकते हैं ताकि यह अधिक वर्बोसिटी के साथ बाहर निकल जाए।
$ function special_execute() { set -x; "$@"; set +x; }
फिर जब आप फ़ंक्शन के माध्यम से कमांड चलाते हैं, special_execute
तो आप देख सकते हैं कि क्या चल रहा है।
पीएस उदाहरण:
$ special_execute ps -eaf
+ ps -eaf
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug21 ? 00:00:01 /sbin/init
root 2 0 0 Aug21 ? 00:00:00 [kthreadd]
...
पर्ल उदाहरण:
$ special_execute perl -MTime::HiRes=sleep -le 'for(1..10) { print; sleep 0.05; }'
+ perl -MTime::HiRes=sleep -le 'for(1..10) { print; sleep 0.05; }'
1
2
3
4
5
6
7
8
9
10
+ set +x
पार्सिंग तर्क $1
आप इस तरह से कुछ कर सकते हैं जैसे कि किसी भी तर्क को पारित करने के लिए $1
।
$ function special_execute() {
[ "$1" -eq "-123" ] && echo "flagY" || echo "flagN";
shift;
set -x; "$@"; set +x;
}
उदाहरण
डिबगिंग सक्षम के साथ:
$ special_execute -123 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagY
+ perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
1
2
3
4
5
+ set +x
डिबगिंग के साथ - -123
:
$ special_execute -123 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagY
1
2
3
4
5
डिबगिंग के साथ - -456
:
$ special_execute -456 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagN
1
2
3
4
5
$@
मेरे लिए काम करता है ..special() { $@; }
...special echo "foo"
देता हैfoo