在調試bash shell腳本時,我看到我在代碼的某個部分中犯的錯誤。這個錯誤可以是變量名稱,變量值或一般的代碼行。如何在調試過程中交互地修改shell腳本?
運行調試模式時可以更正它嗎?或者唯一的選擇是退出調試模式,糾正錯誤並重新運行調試過程?如果存在這樣一種糾正錯誤的選項,那將是非常有用的。特別是對於需要很長運行時間的腳本,您必須從頭多次重複整個運行過程(如果出現很多錯誤)。
例如:
#!/bin/bash
set -x # debugging
trap read debug
a="1" # wrong value, should be 2
b="5"
sum=$(bc <<< "$a + $b")
set +x
上述腳本具有一個陷阱以一次執行一行代碼和按壓輸入之後繼續到下一行。 在調試假設我意識到,一個= 1,但應該是別的東西可以說,A = 2。下一個命令b = 5,由於陷阱還沒有執行,所以我想到了在a = 1之下插入a = 2,然後繼續執行以繼續調試。
喜歡的東西下面的代碼:
#!/bin/bash
set -x # debugging
trap read debug
a="1" # wrong value, should be 2
a="2" # <-This is the value that a should have
b="5"
sum=$(bc <<< "$a + $b")
set +x
這種方法是行不通的,我猜是因爲整個腳本僅在運行的開始調用。在shell腳本中處理這樣一個問題的好方法是什麼?
謝謝
你能詳細說一下'set prev_cmd =「#!/ bin/bash」'是做什麼的? – athanell
我還注意到用於包含調試區域的'set -x'和'set + x'的序列在函數解析器(您的第二個示例)中反向,但我不明白爲什麼。 – athanell
最後,我想問問某人(在使用您提供的第二種或第三種方法時)是否可以包含要調試和糾正的部分腳本。因此,假設在命令'sum = $(bc <<<「$ a + $ b」)'下面是其他代碼行,並且我想包含調試代碼直到sum變量。謝謝@kabanus提供了非常有幫助的答案 – athanell