Я думаю, что это - просто проблема заключения в кавычки при передаче аргументов в функцию.
Попытайтесь назвать его как так:
$ 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
Вы не хотите значение Fs
; Вы хотите строку, соответствующую ФС
(которые могут быть разными строками на одной линии):
> awk -F"[0-9]+." '{ printf "line %3d.: ",NR;
if (NF==1) { print "No FS match in this line"; next; }; str=$0;
for(j=1;j<NF;j++) { match(str, FS); fs_str=substr(str, RSTART, RLENGTH);
printf "_%s_, ",fs_str; str=substr(str, RSTART+RLENGTH)}; print ""; }' file
line 1.: _14._, _20._,
line 2.: _1._, _1._,
line 3.: _2._, _2._,
line 4.: _3._, _3._,