Blog JSystems - uwalniamy wiedzę!

Szukaj

Claude Code

Claude Code: Bash command failed - jak naprawić

W skrócie

  • Problem: komenda uruchomiona przez narzędzie Bash w Claude Code zwróciła kod wyjścia różny od zera.
  • Dlaczego: to najczęściej realny błąd komendy - brak programu, złe argumenty, brak pliku, brak uprawnień albo komenda interaktywna czekająca na wejście.
  • Rozwiązanie: odczytaj kod wyjścia i stderr, uruchom komendę ręcznie w terminalu, popraw argumenty i unikaj komend interaktywnych.

Gdy Claude Code uruchamia komendę przez narzędzie Bash, a ta kończy się kodem wyjścia różnym od zera, dostajesz "Bash command failed (non-zero exit code)". W większości przypadków to nie błąd Claude, tylko realny błąd komendy, który zobaczyłbyś tak samo w swoim terminalu.

Jak to wygląda w praktyce

Claude uruchamia komendę shellową, a ta zwraca niezerowy kod wyjścia. W rozmowie pojawia się "Bash command failed (non-zero exit code)", zwykle wraz z wypisem tego, co komenda wysłała na standardowe wyjście błędów.

Zadanie, które zależało od tej komendy (np. build, test, uruchomienie skryptu), nie kończy się sukcesem, bo powłoka zgłosiła niepowodzenie.

Dlaczego tak się dzieje

Konwencja jest prosta: kod wyjścia 0 oznacza sukces, każdy inny oznacza błąd. Najczęstsze przyczyny niezerowego kodu to: brak programu, którego komenda używa, złe argumenty lub flagi, błąd w samym uruchamianym skrypcie, brak wskazanego pliku, brak uprawnień, albo komenda interaktywna, która czeka na wejście od użytkownika i nigdy się go nie doczeka.

Warto podkreślić: to nie zawsze błąd Claude. Bardzo często jest to prawdziwy błąd komendy - dokładnie ten sam, który zobaczyłbyś, wpisując ją własnoręcznie w terminalu. Claude tylko wiernie pokazuje, że powłoka zwróciła niepowodzenie.

Jak to rozwiązać krok po kroku

  1. Odczytaj kod wyjścia oraz treść z stderr - to tam powłoka opisuje, co konkretnie poszło nie tak.
  2. Uruchom tę samą komendę ręcznie w swoim terminalu, żeby na własne oczy zobaczyć pełny błąd.
  3. Jeśli brakuje programu, zainstaluj go i sprawdź dostępność przez which nazwa_programu.
  4. Popraw błędne argumenty, flagi i ścieżki - sprawdź w dokumentacji komendy poprawną składnię.
  5. Unikaj komend interaktywnych - dodawaj flagi nieinteraktywne (np. -y, --yes, --no-input), żeby komenda nie czekała na wejście.
  6. Rozbij długą, złożoną komendę na mniejsze kroki, żeby łatwiej wskazać, który fragment zawodzi.
  7. Po poprawce poproś Claude o ponowne uruchomienie komendy.

Jak sprawdzić, że zadziałało

Uruchom komendę ponownie - ręcznie lub przez Claude. Kod wyjścia równy 0 oznacza sukces. W wielu powłokach sprawdzisz go od razu po komendzie przez echo $?.

Potwierdź też realny efekt: czy build się zbudował, czy testy przeszły, czy plik powstał. Zerowy kod wyjścia i oczekiwany skutek razem potwierdzają, że problem został usunięty.

Wróć do listy problemów z Claude Code

Szkolenie Claude Code - od zera do zespołu agentów AI, prowadzi Łukasz Matuszewski (JSystems)

Szkolenie Claude Code - od zera do zespołu agentów AI -->

Szkolenie Claude Code - od zera do zespołu agentów AI

Tryb planowania, tryby uprawnień, komendy, MCP, hooki i systemy multi-agent - wszystko na żywym kodzie podczas trzydniowego szkolenia. Prowadzi Łukasz Matuszewski. Szkolenie ma terminy gwarantowane - odbędzie się niezależnie od liczby zgłoszeń.

Sprawdź szkolenie Claude Code

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Co oznacza non-zero exit code?
To informacja od powłoki, że komenda zakończyła się niepowodzeniem. Zgodnie z konwencją systemów uniksowych kod wyjścia 0 oznacza sukces, a każda inna wartość oznacza jakiś rodzaj błędu. Claude Code traktuje niezerowy kod jako sygnał, że komenda padła, i zgłasza to jako Bash command failed.
Czy Bash command failed to zawsze błąd Claude Code?
Nie, i to ważne. W większości przypadków jest to realny błąd samej komendy - brak programu, złe argumenty, brak pliku czy brak uprawnień. Zobaczyłbyś dokładnie ten sam błąd, uruchamiając komendę ręcznie w terminalu. Claude jedynie wiernie przekazuje, że powłoka zwróciła niepowodzenie.
Dlaczego komenda interaktywna powoduje ten błąd?
Komendy, które czekają na wejście od użytkownika (potwierdzenie, hasło, wybór opcji), nie doczekają się go w środowisku uruchamianym przez narzędzie Bash i zwykle kończą się niepowodzeniem lub zawieszeniem. Rozwiązaniem jest dodanie flag nieinteraktywnych, na przykład -y, --yes albo --no-input, żeby komenda przebiegła bez pytań.
Jak najszybciej ustalić, dlaczego komenda padła?
Najpewniejsza droga to uruchomienie tej samej komendy własnoręcznie w terminalu i przeczytanie pełnego wypisu z stderr. Zobaczysz wtedy dokładny komunikat błędu bez pośrednika. Warto też sprawdzić sam kod wyjścia przez echo $? oraz rozbić długą komendę na mniejsze części, żeby zawęzić, który fragment zawodzi.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...