Bra*_*one 19 bash parameter function command bash-script
我正在尝试在 bash 脚本中创建一个函数方法,该脚本执行由参数提供给该方法的命令。
意思是这样的:
special_execute()
{
# Some code
# Here's the point where the command gets executed
$@
# More code
}
special_execute echo "abc"
Run Code Online (Sandbox Code Playgroud)
我已经尝试过我$@,"$@",$*,"$*"我怎么能这样做呢?
slm*_*slm 13
我认为当您将参数传递给函数时,这只是一个引用问题。
尝试像这样调用它:
$ special_execute "echo 'abc'"
'abc'
Run Code Online (Sandbox Code Playgroud)
如果您不想要单引号,请abc像这样更改引用:
$ special_execute "echo abc"
abc
Run Code Online (Sandbox Code Playgroud)
您可以包装函数的内部结构,以便它以更详细的方式回显。
$ function special_execute() { set -x; "$@"; set +x; }
Run Code Online (Sandbox Code Playgroud)
然后当你通过函数运行命令时,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]
...
Run Code Online (Sandbox Code Playgroud)
perl 示例:
$ 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
Run Code Online (Sandbox Code Playgroud)
$1你可以做这样的事情来解析传入的任何参数 as $1。
$ function special_execute() {
[ "$1" -eq "-123" ] && echo "flagY" || echo "flagN";
shift;
set -x; "$@"; set +x;
}
Run Code Online (Sandbox Code Playgroud)
启用调试:
$ 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
Run Code Online (Sandbox Code Playgroud)
关闭调试 - -123:
$ special_execute -123 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagY
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
关闭调试 - -456:
$ special_execute -456 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagN
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)