Możesz sobie wyobrazić komunikat o błędzie, który mówi, że Linux działa w trybie debugowania fragmentu powłoki. Istnieje kilka sposobów rozwiązania tego problemu, więc wkrótce je przedstawimy.

-v (skrót od verbose) nakazuje powłoce wyświetlanie wielu marek skryptów podczas czytania tych ludzi, włącza tryb gadatliwy.-n (skrót od noexec lub not ecxecution wewnątrz wszystkich) — każe powłoce analizować polecenia, ale ich nie angażuje.

Z mojej skrzynki pocztowej:
Zamieszczam mały skrypt Hello World. Jak mogę debugować produkty z nasionami bash, które obejmują skrypty, które działają w systemach Linux i Unix?
To zawsze była najczęściej zadawana tajemnica ostatnio przez administratorów systemów lub użytkowników Linuksa i UNIXa. Debugowanie scenariuszy powłoki może być żmudną pracą (i niełatwą do odczytania). Z pewnością istnieje kilka sposobów debugowania skryptu porów.

Będziesz musiał spełnić argument -x na -v w powłoce zdarzeń, aby upewnić się, że przechwytujesz każdą linię tego oprogramowania.
| -amphtml-sizer>
Ustalmy, jak debugować program bash-null działający w systemie Linux przy użyciu metod zakresu Unix. Opcja

-y Aby debugować dowolny skrypt powłoki Bash

set -x: podświetl polecenia i wszystkie argumenty podczas wykonywania tych osób.set -volts: Wyświetla wiersze wiedzy o pociskach, nawet jeśli są czytane.

Uruchom powiedziałbym, że program powłoki ze ścieżką -x do podjęcia.
$ Oznaczenie skryptu bash
$ Przycisk Wstecz bash -x domains.sh

Korzystanie z wbudowanego predefiniowanego polecenia

Opcje debugowania produktów powłoki bash, które można rozszerzyć do włączenia lub wyłączenia za pomocą polecenia define:

  • set -x — Pokaż polecenia i dyskusje firmy podczas ich wykonywania.
  • set -v : Wyświetlaj wielkość liter tylko dlatego, że wiersze mają być czytane.

Możesz zachować domyślną linię shebang:
numer! / bin / bash
z następującym kodem głównym (do debugowania):
#! / bin / harrass -xv

Użyj informacji o inteligentnych funkcjach DEBUG

Przede wszystkim dodajesz całkiem fajną zmienną _DEBUG. Spraw, aby _DEBUG był przydatny, gdy musisz debugować te skrypty:
_DEBUG = "włączone"

Debuger był narzędziem, które z łatwością wykonuje program funkcjonalny lub skrypt, jeśli umożliwia zbadanie typowych wewnętrznych elementów skryptu lub procesu, nawet gdy są uruchomione. Ze specjalnymi skryptami nie mamy świetnego rozwiązania do debugowania, ale z opcjami ray (-n, -v i -a) naprawdę mogę to debugować.

Teraz, gdziekolwiek musisz debugować, po prostu dołącz funkcję DEBUG w następujący sposób:
DEBUG echo "Plik to nazwa pliku rrr"
LUB
NAPRAWY DEBUGOWANIA -a
Cmd1
Polecenie2
DEBUGOWANIE + x Oferta

Kiedy skończysz używać tylko tego (i debugować go przed uzyskaniem osobistego skryptu do produkcji), zdecyduj się wyłączyć _DEBUG. Zdecydowanie usuń debugowanie okna dialogowego Tak.
Ustaw _DEBUG = "wyłączony" numer wszystko, ale nie włączony

Zapisz zamyka określony plik. Uruchom skrypt w następujący sposób. (puste)
$ ../script.sh
Wniosek:

Odtwarzanie plikówZnaleziono, gdy plik xyz.txt+ a równa się 2+ B = 3+ c równa się 5+ Oferta DEBUGÓW + x+ ‘[‘ całkowicie świeci == na ‘]’+ zmiany + x2 + 3 równa się 5

Teraz wyłącz DEBUG (należy wreszcie edytować plik):
_DEBUG oznacza „wyłączony”
Uruchom skrypt:
dolar ./script.sh
Wniosek:

Znaleziono następny plik xyz.txt2 + 3 równa się 5To prosta, ale w gruncie rzeczy cenna sztuczka. Możesz także użyć DEBUG jako aliasu większości funkcji.

Rozwiązywanie typowych błędów skryptu powłoki Bash

Bash, sh lub ksh wyświetlają wiele różnych komunikatów o błędach, aw wielu przypadkach komunikat o błędzie może nie zawierać zbyt szczegółowych informacji.

Przejdź do uprawnień do śledzenia wykonywania plików

Jeśli możesz napisać swój wstępny skrypt powłoki dla hello world side, może pojawić się błąd, który naprawdę się podoba:
bash: ./hello.sh: Odmowa dostępu
Określ lokalizacjęZmienianie chmod w poleceniu:
$ chmod + z hello.sh
$ ./hallo.sh
$ Okazja bonjour.sh

Nieoczekiwany błąd w pliku docelowym

Jeśli większość ludzi otrzyma nieoczekiwany błąd zamykania pliku, otwórz plik skryptu i upewnij się, że zawiera zarówno cytaty otwierające, jak i dodatkowo skróty. W tym przykładzie całe oświadczenie o ujawnieniu ma otwarte odniesienie, ale bez cudzysłowów:

Ponadto nigdy nie należy zapominać o zamknięciu publicznego quizu z powodu brakujących nawiasów klamrowych ():

Brakujące słowa kluczowe, takie jak Fi, Esac, ;; Itd.

Jeśli to wygasły słowa kluczowe, takie jak fi lub alternatywnie nawet ;; Otrzymujesz nowy, świetny komunikat o błędzie „nieoczekiwane xxx”. Zadbaj więc o wszystkie zagnieżdżone instrukcje if i instrukcje poboczne z poprawnymi słowami kluczowymi. Zobacz każdą stronę podręcznika bash, aby poznać osobiste potrzeby dotyczące składni. W tym przykładzie zdecydowanie może brakować tego fi:

Przenoszenie lub modyfikowanie skryptów powłoki z systemu Windows lub Unix Windows

Częstym sposobem na uruchomienie bajecznej podpowłoki jest użycie opcji -ful, która wymusza uruchomienie całego pisania w trybie debugowania. Ślady skojarzone z każdym poleceniem i jego argumentami mogą być wyświetlane na typowym wyjściu po ulepszeniu poleceń, ale wykonywane są początkowo. Często jest to skrypt commented-script1.sh, który był uruchamiany w pobliżu trybu debugowania.

Nie twórz określonych skryptów w systemie Linux/Unix, ale także czasu opóźnienia w systemie Windows. Kolejnym problemem jest obsługa specjalnych zdarzeń w skrypcie inwestycyjnym w systemie Windows 10 i obchodzenie ich / h rozruchu i serwera uniksowego. Dzieje się tak, gdy błąd i bardzo podobnie myślące polecenie, które nie zostało znalezione, mają zostać przekazane do tego powrotu karetki (DOS CR-LF). Jesteś bardzo dobry w tłumaczeniu łamania linii DOS-u CR-LF na format Unix / Linux przy użyciu następującej składni:
dos2unix my-script.sh

Unikalna wskazówka — wyślij wiadomość debugowania do Stderr

Błąd standardowy jest zwykle urządzeniem wyjściowym zapobiegającym błędom, dlatego jest używany do pozytywnie rejestruj każdy bit komunikatów o błędach systemu. Dlatego uważa się za zalecane wysyłanie na urządzenie wiadomości z ich nieopłaconym błędem:

Wskazówka 2 — Włącz podświetlanie składni podczas korzystania z edytora tekstu Vim

Większość nowoczesnych edytorów książek umożliwia ustawienie tych opcji podświetlania składni. Jest to przydatne do rozpoznawania składni i rozwiązywania typowych błędów, takich jak otwieranie i zamykanie cudzysłowów. Możesz zobaczyć nasz własny program bash w różnych kolorach. Ta zaleta ułatwia konstruowanie składni struktury pakietu okładek i niezawodnie wykrywa niepowodzenia. Nacisk zwykle nie wpływa na znaczenie samego tekstu; nasz jest tylko dla Ciebie. Ten przykład wykorzystuje podświetlanie składni vim w moim skrypcie wieczorowym:

Wskazówka lub więcej — użyj funkcji Shellcheck do wygładzenia skryptu

ShellCheck może być przestarzałym narzędziem do analizy skryptów. Często może być używany do wyszukiwania błędów w skryptach wrażliwych na sprawy. Napisany w Haskell. Ostrzeżenia i sugestie można znaleźć w skryptach powłoki bash / sh kupując to narzędzie. Zobaczmy, jak zainstalować i używać ShellCheck w rzeczywistym systemie Linux lub Unix, aby znacznie poprawić skrypty powłoki Twojej rodziny i uniknąć błędów wydajności.

Zobacz też:

  • Dowiedz się, jak włączyć wyświetlanie formatu w edytorze tekstu vim.
  • Męska witryna Bash
  • BASH, którzy ulepszyli debugger, wsparcie debugowania, ale także obsługę błędów.

<środek> REKLAMA

dev / null [$? -eq 5] && echo "Znaleziono w dużym pliku $ i"zrobiłWpis debugowania -xa jest równe 2b = 3c = rrr (($a + $b))Oferta DEBUG + zecho "$ a + $ k = $ c"

 #! kosz / bash.......echo 'Błąd: nie znaleziono pliku                                        ^^^^^^^                                        brak cytatu 
 numer! / kosz / bash.....[! -b KATALOG] && pokaż "Błąd: nie znaleziono informacji o braku roota"; zostaw 1;                                                                    ^^^^^^^^^^^^^^                                                                    brakujące mieszkanie...

uruchom tryb debugowania skryptu inwestycyjnego linux

 #! dla każdego kosza / bashecho "Uruchamiam..."....jeśli [$ 1-równowartość dziesięć]Więc   w instancji [$2-eq 80]   Więc      zademonstrowali "zrób coś"FiAdla f w plikach $robić  demonstracja $ fzrobiłA# Brak adresu e-mail fi 
 # literówka przez standardowe wyjścieecho "Błąd: nie znaleziono jednej konkretnej półki"## Napisz błąd, aby być bardziej zdolnym do stderr (uwaga 1> i druga na końcu skojarzona, która ma commandecho)#echo "Błąd: plik $ nie znaleziono konkretnego" 1> i para