4
我已經開始編寫shell腳本了,我發現自己經常需要編寫debug echo來跟蹤腳本正在做什麼。的,簡單的,方法我以前做的這項權利是寫這樣的:無法評估函數的腳本參數
#!/bin/bash
myVar = 'Erractic Nonesense'
echo "myVar: $myVar"
==>myVar: Erractic Nonesense
這偉大的工作,是相當簡單的,但是,有寫這爲每個變量我希望追查是很累,因爲誰認爲有更少的代碼做更多的東西是偉大的人,我寫我自己的函數:
#!/bin/bash
dbg() # $msg
{
echo "[email protected]: ${[email protected]}"
}
myVar = 'Erractic Nonesense'
dbg myVar
==>myVar: Erractic Nonesense
這適用於常規變量,但對於腳本參數($ 1,$ 2等)不起作用。爲什麼?
==>$ ./myScript 123
#!/bin/bash
...
dbg 1 # This is the bugger in question.
==>1: 1
而且也,這可怎麼規避?
編輯
感謝Barmar我現在明白爲什麼它的行爲這樣,但是,第二個問題依然存在。
EDIT 2
使用koodawg的想法,這就是結果。有用。 更新,請參閱編輯4
編輯3
我認爲EDIT 2和set +-x
的組合將是一個可行的解決方案。
EDIT 4
更新邏輯落在參數與前一個並不總是奏效。添加了花哨的標籤。
RX_INTEGER='^[0-9]+$'
DBG_SCRIPT_ARGS=("$0" "[email protected]")
DBG_PADDING=" " # tabs of 8 spaces
dbg() # $msg | OUT$args OUT$res
{
[email protected]
[[ $args =~ $RX_INTEGER ]] && res="${DBG_SCRIPT_ARGS[args]}" || res="${[email protected]}"
printf "%s%s\`%s\`\n" "$args:" "${DBG_PADDING:$(((${#args}-1)%${#DBG_PADDING}))}"
}
試過嗎?通過在腳本中放置'set -x'來啓用調試 - 將所有命令輸出爲已執行。 –
哦。謝謝你提醒我存在!現在唯一的問題是閱讀它輸出的巨大混亂......我仍然好奇爲什麼我的功能不起作用。 – gxtaillon
在函數內部,'$ 1','$ 2'等引用函數的參數,而不是原始腳本的參數。 – Barmar