Bash
執行函式參數提供的命令
我正在嘗試在 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