Sådan Fanger Du Output og Bevarer Exit-Kode i Bash-Scripts

Hvordan kan output fra en funktion opnås, samtidig med at det bevares, at funktionen kan afslutte med en ikke-nul exit-kode, når $() anvender en sub-shell, som forhindrer outer-scope.sh i at afslutte ved fejl i inner()?

For at opnå output fra en funktion og samtidig sikre, at funktionen kan afslutte med en ikke-nul exit-kode, kan du bruge en variabel til at fange output, gemme exit-koden i en variabel og derefter evaluere og håndtere exit-koden efter behov.

Hvordan kan output fra en funktion opnås, samtidig med at det bevares, at funktionen kan afslutte med en ikke-nul exit-kode, når $() anvender en sub-shell, som forhindrer outer-scope.sh i at afslutte ved fejl i inner()?

For at opnå output fra en funktion og samtidig sikre, at funktionen kan afslutte med en ikke-nul exit-kode, kan du følge disse trin:

  1. Brug en variabel til at fange output:

    Du kan bruge en variabel til at fange output fra funktionen, mens du stadig kan kontrollere exit-koden.

  2. Gem exit-koden:

    Efter at have kaldt funktionen, gem exit-koden i en variabel.

  3. Evaluer exit-koden:

    Evaluer exit-koden og håndter den efter behov.

Her er et eksempel på, hvordan du kan gøre dette i et Bash-script:


#!/bin/bash

inner() {
  echo "Dette er output fra inner funktionen"
  return 1  # Returner en ikke-nul exit-kode for at simulere en fejl
}

# Kald inner funktionen og fang output
output=$(inner)
exit_code=$?  # Gem exit-koden

# Print output
echo "Output fra inner: $output"

# Evaluer exit-koden
if [ $exit_code -ne 0 ]; then
  echo "inner funktionen fejlede med exit-kode $exit_code"
  exit $exit_code  # Afslut outer-scope.sh med samme exit-kode
else
  echo "inner funktionen lykkedes"
fi

Med denne tilgang kan du:

  • Fange og bruge output fra funktionen.
  • Bevare exit-koden fra funktionen og håndtere den korrekt.
  • Sikre, at outer-scope.sh afslutter med den korrekte exit-kode, hvis inner() fejler.