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.