我有一個非常大的腳本(函數包含大約4000行代碼)。這裏是它的一部分:記錄一個bash腳本文件
#!/bin/bash
. ./functions > /dev/null 2>&1
some_function(){
while true
do
CHOICE=$(whiptail --menu "\n\n\n\n\n\n\n\n" --title "Tools" --nocancel $window 20 \
"1" "Option1" \
"2" "Option2" \
"3" "Option3" 3>&1 1>&2 2>&3)
case $CHOICE in
1)echo $1 $2 $3;;
2)echo $2 $1 $3;;
3)echo $3 $2 $1;;
esac
done
}
while true; do
arr=()
for ((n=1; n<=$node_num; n++))
do
node+=($n NODE$n)
done
OPTION=$(whiptail --menu "\n\n\n\nPlease choose:\n\n\n" --title "tools" $window 20 "${node[@]}" \
case $OPTION in
1) some_function 1 2 3 ;;
2) some_function 2 1 3 ;;
3) some_function 3 1 2 ;;
esac
done
我想記錄腳本中執行的命令。
我迄今爲止嘗試是:
#!/bin/bash -x
- >這將記錄所有的輸出,同時也將「垃圾郵件」中與像變量值等不需要的信息日誌,但是這似乎是迄今爲止的最佳方式...- 我試過
#!/bin/bash -i
,通過設置-o歷史來啓用歷史記錄。這樣做的缺點是會記錄一切。例如,當我調用函數文件時,它會記錄每一行,就像它被執行一樣。 我曾嘗試創建日誌功能:
logthis(){ ## print the command to the logfile echo "$(date) [email protected]" >> $historyfile ## run the command and redirect it's error output ## to the logfile eval "[email protected]" 2>> $historyfile }
這似乎是工作的大部分時間。但是,當我這樣做,例如:
case $OPTION in 1) logthis "some_function 1 2 3" ;; 2) some_function 2 1 3 ;; 3) some_function 3 1 2 ;; esac
它不會工作,我將失去參數1 2 3
你有沒有做一個優雅的記錄系統是bash裏面的任何其他的想法腳本?
可以使用'set -x'和'set + x'在腳本中根據需要啓用和禁用跟蹤;它是您的選項1的更細粒度版本。 – chepner
選項2不需要'-i'選項;歷史記錄在交互式shell中默認啓用,但不需要*交互式shell。 – chepner
是的,我可以啓用和禁用調試模式,但正在尋找更優雅的方式,而不是通過所有的代碼和設置設置-x/set + x –