আমার মনে হয় আপনি যখন যুক্তিটি ফাংশনে প্রবেশ করছেন তখন এটি কেবল একটি উদ্ধৃত সমস্যা।
এটিকে এভাবে ডাকার চেষ্টা করুন:
$ special_execute "echo 'abc'"
'abc'
আপনি যদি একক কোট চারপাশে না চান তবে উদ্ধৃতিটি এর abc
মতো পরিবর্তন করুন:
$ special_execute "echo abc"
abc
ডিবাগ
আপনি ফাংশনটির অভ্যন্তরীণ অংশগুলি মোড়ানো করতে পারেন যাতে এটি আরও ভার্বোসিস সহ প্রতিধ্বনিত হয়।
$ function special_execute() { set -x; "$@"; set +x; }
তারপরে আপনি যখন ফাংশনটির মাধ্যমে কমান্ডগুলি চালাবেন, special_execute
আপনি দেখতে পাচ্ছেন কী চলছে।
PS উদাহরণ:
$ 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