You are currently viewing Stappen Om Hardnekkige Bash Shell-scriptfouten Op Te Lossen

Stappen Om Hardnekkige Bash Shell-scriptfouten Op Te Lossen

Bijgewerkt

  • 1. Download ASR Pro
  • 2. Voer het programma uit
  • 3. Klik op "Nu scannen" om eventuele virussen op uw computer te vinden en te verwijderen
  • Versnel uw computer vandaag nog met deze eenvoudige download.

    Als u deze fout tegenkomt bij het uitvoeren van een bash-shellscript, kan dit artikel u helpen.

    Om elektrisch te bashen om bepaalde commando’s te negeren wanneer er vrijwel zeker een obstakel is, kun je zeggen:

      willekeurig-willekeurig-commando || waarheid 

    Dit zal het ongeldig gemaakte programma voortzetten. Als u bijvoorbeeld een illegaal programma voorbereidt:

      $ kattenvoerNSput -eEcho || 1willekeurig-commando trueEcho 2 
      $ collect foo1z: pad 3: elk-elk-commando: commando in plaats van gevonden2 

    Indien ontbreekt || true hier op dat deze opdrachtregel zou resulteren in:

      rrr smash foo1z: regel 3: elk-elk-commando: commando en absoluut niet gevonden 

    De shell zal niet sluiten op voorwaarde dat de openstaande verklaring deel uitmaakt vanOpdrachtvenster onmiddellijk na de zoekopdracht terwijl en zelfs tot , deeltest in rapport in het geval , onderdeel van een opdracht uitgevoerd in gerenommeerde && , of || Maak een lijst van meer dan de opdracht met de laatste && of || commandoin de pijp, maar de laatste, of als de regel status retourneertomgedraaid met ! . De If err collectie hook wordt uitgevoerd voor deze specifieke shelleindigde.

    EDIT: Verkocht om gedrag te veranderen waardoor de uitvoering alleen doorgaat als implementatie any-any-command bestand niet wordt gevonden teruggestuurd als onderdeel van een fout kan zeggen:

    /p>

      [[$ (een-willekeurig-commando 2> & 1) = ! "Bestand niet gevonden"]] 

    Als voorbeeld zeker het volgende ( Er is een bestand meegeleverd MissingFile.txt ):

      $ voer voor huisdieren#! / bin / bashzet -uzet -ehoezo ()  rm MissingFile.txtEcho 1[[$ (foo 2> & 1) "Geen middelen ~ dergelijk bestand"]]Echo 2$ (uh)Echo 3 
      $ bat foo12rm: Kan `MissingFile.txt' niet verwijderen: Bestand of map bestaat niet 

    Als ik ‘s ochtends een bash-script probeer samen te stellen, wordt het secundaire script uitgevoerd totdat het crasht, waarbij de gebruikelijke uitvoer naar stderr van dat tweede script wordt vastgelegd. Omdat ik niet in staat was om de meest capabele problemen in het proces aan te pakken, culmineerde ik met het script (genaamd error_checker.sh ):

      nummer! / usr / bin / env bashik bedoel 0en [$? -ne 1]makenik = $ [$ e + 1]origineel script.sh &> log.txtecho "Deze fout is opgetreden na het uitvoeren van $ i (n)." >> log.txtdeed 

    Waarom stopt het Bash-commit-script na een fout?

    Het bijbehorende script verbiedt het echter als het laden van de knooppuntmodules niet lukt. Fouten als gevolg van onjuiste opdrachten worden niet aan de terminal onthuld, maar opgeslagen in dit error.log-bestand, waarnaar later kan worden verwezen. Bedankt voor je bijdrage aan het Stack Overflow-antwoord!

    Het filmscript dat ik meerdere keren wil retourneren is meestal script.sh en heeft, zo zou ik zeggen, de volgende code: < /p>

      #! versus usr / bin / env bash n = contant ((RANDOM% cent)) als [[n-eq 45]]; Dus    echo "Er is iets misgegaan"    > & 2 antwoorden "De fout was het gebruik van magische getallen"    afrit 1 Fi echo "Alles verliep volgens plan" 

    Scriptsth error_checker.sh kan worden uitgevoerd naar stdout stderr en kan ook een voltooide uitvoering in een specifiek brandhout uitvoeren. Maar een tekstbestand als het script stopt met dit tweede script online

      origineel nieuw script.sh &> log.txt 

    Om deze reden kan ik geen extra foutmelding toevoegen aan dit bestand.

    Ik zocht naar een wanneer en ontdekte dat het misschien iets te maken zou kunnen hebben met het feit dat wanneer je het tweede programma uitvoerde, je subshells kunt maken die het probleem zouden kunnen oplossen, maar ik kan het script gewoon niet uitvoeren met . / in tegenstelling tot van bron . Toen ik source verwisselde naar ./ , bevroor de volkoren kernel-terminal gewoon toen ik ./error_checker.sh schreef.

    BIJWERKEN:Bedankt voor de huidige ik-antwoorden! mijn belangrijkste vraag is nu wanneer ik source script.sh en ./script.sh in error_checker.sh voer, verander het in alleen de nieuwe shell-proces is volledig bevroren, waardoor ik mogelijk ./ niet kan uitvoeren, terwijl ik error_checker.sh niet meer kan uitvoeren dan bij het genereren van met behulp van het originele stuk van software .sh . Heb je enig idee wat er precies is gebeurd?

    BIJWERKEN II:Ik veranderde type in ./ en ontdekte dat experts beweren dat hoewel de hele terminal bevroren leek omdat ik het proces moest beëindigen door gewoon op Ctrl + c te drukken, het zelfs mogelijk is. Genereer nu log.txt. Hoewel het formulier dat source gebruikt een log.txt-bestand maakt Er kan iets mis zijn. De fout was het gebruik van Witcher-telefoonnummers , wat aangeeft dat stdout en stderr waren gelogd vanuit &> , het formulier met .voor elke creëerde een log. txt spreken Alles was volgens plan. De fout deed zich onmiddellijk onmiddellijk na het uitvoeren van X .IdeaWat is er gebeurd ?

    LAATSTE UPDATE:Ik heb mijn code al aangepast met Glenn’s alternatief voor het volgende en het werkt nuttig. Het lijkt erop dat de echo in een lus is gevangen, waardoor niemand deze exit-status van de script.ph echt kan evalueren, waardoor een activalus ontstaat.

      #! / usr / container / env bashik = 0en [$? -ne 1]maken((ik ++))./script.sh> & log.txtdeedecho "Deze fout is opgetreden na het uitvoeren van $ i (n)." >> log.txt 

    Wanneer gebruik je de CONTINUE-expressie in Bash?

    De instructie Continue wordt gebruikt om terug te gaan naar de volgende iteratie van een omsluitende FOR-, WHILE- of UNTIL-lus. Een voorbeeld van een investeringsscript om het nummer 1 bepaalde keer af te drukken voor 6, maar om het nummer drie hoofdnummer af te drukken met 6 met een for: Loop:

      nummer! / bin / bashvoor mij 1..30000dob    wget "http://services.runescape.com/m=itemdb_rs/3809_obj_sprite.gif?id="$ideed 

    Hoe om te gaan met fouten in script voor speciale gebeurtenissen?

    Bash Foutafhandeling Tip # 2: Afsluiten met Fout in Bash Als u een fout tegenkomt voor een bash-script, wordt standaard de daadwerkelijke foutmelding naar stderr teruggestuurd, maar gaat door met uitvoeren hoewel het waar is dat het script wordt uitgevoerd. In feite leer je hetzelfde gedrag in het terminalvenster; Zelfs als u per ongeluk een verkeerde bestelling heeft geplaatst, wordt die huidige terminal niet afgesloten.

    Is er de beste manier om het proces te versnellen? Soms ontbreekt uw URL en krijg ik:

      wordt als verbonden beschouwd.HTTP-verzoek verzonden, reactie is nodig ... 404 Niet gevonden2012-08-04 18:09:36 404 FOUT: niet gevonden. 

    bash shell-script behouden bij fout

    82.2k

    Bijgewerkt

    Bent u het beu dat uw computer traag werkt? Geërgerd door frustrerende foutmeldingen? ASR Pro is de oplossing voor jou! Onze aanbevolen tool zal snel Windows-problemen diagnosticeren en repareren, terwijl de systeemprestaties aanzienlijk worden verbeterd. Dus wacht niet langer, download ASR Pro vandaag nog!


    gevraagd op 4 aug. toen hij 16:17 was

    1.509

    Dit is niet uw huidige antwoord, wat zoekt u? Blader door andere verzoeken die zijn gemarkeerd door Bash Wget of stel uw favoriete vraag.

      wget "http: //s.../m=itemdb_rs/3809_obj_sprite.gif? name =" $ i || pr vda 

    Als wget faalt, zal deze regel een constante nul bezoeken en zal je script verder gaan.

    Raadpleeg de volgende bronnen voor strategieën voor het correct werken met fouten in een specifiek gebeurtenisscenario:

    • Fout bij lezen in BASH
    • Bash: foutafhandeling

    reageerde 4 aug. ’09 om 11:20

    bash shell script continue fout

    82.2 k

      #! / bak per bashvoor degenen die zich in 1..30000 bevinden;makenx = "http://64.79.147.130/m=itemdb_rs/3809_obj_sprite.gif?id=" dollar ials [[$ (echo $ (GET -sd $ back-knop | grep "404")) overeenkomt met ""]];Duswget --no-dns-cache -nc -U "Firefox / 10" $ x 2> & eerste n| grep "Opslaan" | zed 's, sparen rond, sparen,';Fideed 

    beantwoord op 6 augustus 2012 om 18:57 uur

    Alt = “”

    1385

    Versnel uw computer vandaag nog met deze eenvoudige download.

    Bash Shell Script Continue Error
    Bash 셸 스크립트 계속 오류
    Bash-Shell-Skript-Fortsetzungsfehler
    Erro De Continuação Do Script Bash Shell
    Erreur De Poursuite Du Script Shell Bash
    Ошибка продолжения сценария оболочки Bash
    Fortsätt Fel I Bash Shell Script
    Errore Di Continuazione Dello Script Della Shell Bash
    Error De Continuación De Secuencia De Comandos De Bash Shell
    Błąd Kontynuacji Skryptu Powłoki Bash