Mit jelent “1 > >” és “2 > >` jelentése bash szkriptben?

A következő bash parancsfájlom van, amit értek >> a parancs kimenetét egy meglévő fájlhoz fűzöm felülírás helyett, amit megértek >> csinál ebben az esetben? Ez a szkript néhány exe fájlt hív meg konvertálni egyik formátumból a másikba. Minden fájlnak sok éve van, ezért az egyes fájlokat végignézi a fájlnév megtekintésével. A szkript futtatásakor “kétértelmű átirányítást” kapok

#!/bin/bash source $HOME/.bashrc jobout=${1} joberr=${2} # Set some paths and prefixes yr_bgn=2000 yr_end=2000 yr=${yr_bgn} pth_data="/mnt/" pth_rst="/mnt/" while [ ${yr} -le ${yr_end} ] do ./executable1 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable2 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable3 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} let yr=${yr}+1 done 

Megjegyzések

  • Hogyan hívja ezt a szkriptet?
  • a (z) kétes átirányítás lehetséges > 2 $
  • @HaukeLaging, nem, nem az. Úgy tűnik, hogy a kérdés valami közeli dologra vonatkozik, de nem ugyanaz
  • @RomeoNinov Megtenné, hogy elmagyarázza a releváns különbséget?
  • @HaukeLaging a szkript egy .sh fájlba van mentve. Csak beírom ./myscript.sh

Válasz

1>> és a 2>> átirányítások meghatározott fájlleírókhoz, ebben az esetben a standard kimenet (1. fájlleíró) és a standard hiba (2. fájlleíró).

Tehát a szkript az összes “standard” üzenetet átirányítja a ${jobout} címre, az összes hibaüzenetet pedig a ${joberr} címre. A >> mindkét esetben használata azt jelenti, hogy az összes üzenet a megfelelő fájlokhoz van csatolva.

Ne feledje, hogy ${jobout} és ${joberr} vigye az értékeiket a két parancssori paraméterből a szkriptbe (${1} és ${2}) , ezért meg kell adnia azokat a fájlokat, amelyeket használni kíván az üzenetek tárolásához. Ha a paraméterek nincsenek megadva, akkor a szkript előállítja a “kétértelmű átirányítás” hibaüzenetet; a szkriptnek valóban ellenőriznie kell, hogy megadták-e a paramétereket, és különben megfelelő hibaüzenetet kell előállítania, például

if [ -z "$1" -o -z "$2" ]; then echo "Log files for standard and error messages must be specified" echo "${0} msgfile errfile" exit 1 fi 

a szkript elején.

Válasz

Az Ön esetében 1 >> csatolja az aktuális stdout kezelő adatait a $ {jobout} 2 fájlhoz >> csatolja az információkat az aktuális stderr kezelőtől a $ {joberr} fájlig

a joboutr és a joberr fájlok, amelyeket a szkript első és második paramétereként határoznak meg

Válasz

Mivel a szkript meghívásában nincsenek paraméterek, a $1 és a $2 paraméterek üresek és így vannak $jobout és $joberr.

A szkriptet így kell hívnia:

./myscript.sh file1 file2 

megjegyzések

  • A paraméterszámoknak semmi közük a >> átirányítási operátorok előtti számokhoz .
  • Sebaj, látom, hogy ' válaszolsz a kétértelmű átirányításra vonatkozó részre, nem pedig a címben szereplő kérdésre. Valószínűleg egyértelműbbé kellene tennie a válaszát erről.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük