Bash

執行函式參數提供的命令

  • August 28, 2013

我正在嘗試在 bash 腳本中創建一個函式方法,該腳本執行由參數提供給該方法的命令。

意思是這樣的:

special_execute()
{
   # Some code

   # Here's the point where the command gets executed
   $@

   # More code
}

special_execute echo "abc"

我已經試過了,我怎麼$@能這樣做?"$@"``$*``"$*"

我認為當您將參數傳遞給函式時,這只是一個引用問題。

嘗試這樣稱呼它:

$ 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]
...

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

解析參數$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

引用自:https://unix.stackexchange.com/questions/88472