Table of Contents
Bijgewerkt
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.
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
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