Fish Shell:
Hantering av fel

Hur gör man:

För att fånga fel i Fish, luta dig mot status-kommandot och villkorssatser. Anta att ping misslyckas; här är hur du upptäcker det:

ping -c 1 example.com
if not status is-success
    echo "Något fisigt hände med ping."
end

Exempelutdata om ping misslyckas:

Något fisigt hände med ping.

För att hantera en specifik felkod, använd status --is:

false
if status --is 1
    echo "Fångade ett fel med kod 1."
end

Exempelutdata:

Fångade ett fel med kod 1.

För en mer robust ansats, överväg att använda en funktion:

function try_ping
    ping -c 1 example.com
    or begin
        echo "Ping misslyckades med status $status"
        return 1
    end
end

try_ping

Fördjupning

Felhantering i Fish matchar inte try/catch-paradigmet du kanske känner från högnivåspråk. Istället har du raka utgångsstatusar som tillhandahålls av status-kommandot.

Historiskt sett, i Unix-liknande system, innebär en utgångsstatus på 0 framgång, medan vilket icke-noll värde som helst indikerar ett fel, vilka vanligtvis speglar olika skäl till misslyckanden. Denna konvention används av de flesta kommandoradsverktyg och därmed även av Fish självt.

Alternativ till status-kontroller i Fish inkluderar signalhantering via trap i andra skal, men Fish föredrar mer uttalade statuskontroller, eftersom det är renare och mindre benäget för sidoeffekter.

Implementeringsmässigt förblir felhantering i Fish enkel men kraftfull, mycket tack vare dess icke-blockerande natur och betoning på tydlig syntax, som visas i exemplen. Felkoder samspelar snyggt med funktioner, vilket möjliggör modulär och lättläst felhantering.

Se också