Acho que é apenas um problema de citação quando você passa os argumentos para a função.
Tente ligar assim:
$ special_execute "echo 'abc'"
'abc'
Se você não quiser as aspas simples em torno de abc
, altere as citações desta forma:
$ special_execute "echo abc"
abc
Depuração
Você pode envolver os elementos internos da função para que ela ecoe com mais verbosidade.
$ function special_execute() { set -x; "$@"; set +x; }
Então, quando você executar comandos através da função, special_execute
, você poderá ver o que está acontecendo.
ps exemplo:
$ 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]
...
perl example:
$ 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
Argumento de análise $1
Você poderia fazer algo assim para analisar quaisquer argumentos passados como $1
.
$ function special_execute() {
[ "$1" -eq "-123" ] && echo "flagY" || echo "flagN";
shift;
set -x; "$@"; set +x;
}
Exemplo
com a depuração ativada:
$ 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
com depuração desativada - -123
:
$ special_execute -123 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagY
1
2
3
4
5
com depuração desativada - -456
:
$ special_execute -456 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagN
1
2
3
4
5