FAQ Pseudo-debugowanie skryptu Bash

Silas Mariusz

rm -rf /
Help us, GOD!
5 Kwiecień 2008
10 318
33
2 634
153
40
Nowy Sącz
forum.qnap.net.pl
QNAP
TS-x77
Ethernet
1 GbE
  1. Eksportujemy zmienną globalną PS4, która będzie odpowiedzialna za kwestie wizualną:
    Bash:
    export PS4="\e[0;33m+\e[0;36m"'(${BASH_SOURCE##*/}:\e[0;35m${LINENO}'"\e[0;31m\e[0;37m) "
  2. Aby uruchomić skrypt bash z włączonym debugowaniem, wykonaj następujące:
    • Wersja interaktywna:
      Bash:
      sh -c '_p="/etc/init.d/nvrd.sh" && read -p "Script path [${_p}]: " _t; [ -z "$_t" ] && _t=$_p; (set -x; date ; . $_t) | tee -a /share/Public/trace_run.out'
    • Wersja nieinteraktywna, w której na początku deklarujemy komendę lub ścieżkę do pliku .sh:
      Bash:
      _t="/etc/init.d/nvrd.sh.stop"		# tu nalezy podac sciezke lub polecenie shell
      _l=/share/Public/trace_run.out		# sciezka do pliku logowania 
      
      sh -c "set -x; date >> \"$_l\" ; . $_t 2>&1 | tee \"${_l}.tmp\"; sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' \"${_l}.tmp\" > \"$_l\""
Efekt:
upload_2015-7-31_0-49-34.png