Vad gör `1 > >` och `2 > >` betyder i ett bash-skript?

Jag har följande bash-skript, från vad jag förstår >> används för att lägga till utdata från ett kommando till en befintlig fil istället för att skriva över, men vad gör det i det här fallet? Detta skript ringer några exe-filer för att konvertera från ett format till ett annat. Det finns många år för varje fil, så det går igenom varje fil genom att titta på filnamnet. När jag kör det här skriptet får jag ”tvetydig omdirigering”

#!/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 

Kommentarer

  • Hur mår du kallar du det här skriptet?
  • möjlig duplikat av Omfattande omdirigering gjort > $ 2
  • @HaukeLaging, nej det är det inte. Frågan verkar handla om något nära, men inte detsamma
  • @RomeoNinov Har du något emot att förklara den relevanta skillnaden?
  • @HaukeLaging skriptet sparas i en .sh-fil. Jag skriver bara ./myscript.sh

Svar

1>> och 2>> är omdirigeringar för specifika filbeskrivare, i detta fall standardutdata (filbeskrivare 1) och standardfel (filbeskrivare 2).

Så skriptet omdirigerar alla ”standard” -meddelanden till ${jobout} och alla felmeddelanden till ${joberr}. Att använda >> betyder i båda fallen att alla meddelanden läggs till respektive filer.

Observera att ${jobout} och ${joberr} tar sina värden från de två kommandoradsparametrarna till skriptet (${1} och ${2}) , så du måste ange de filer du vill använda för att lagra meddelandena. Om parametrarna inte ges kommer skriptet att ge ”tvetydig omdirigering” felmeddelandet du har sett; skriptet ska verkligen kontrollera om parametrarna har tillhandahållits och ge ett lämpligt felmeddelande annars, något som

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 

i början av skriptet.

Svar

I ditt fall 1 >> lägg till informationen från nuvarande stdout-hanterare till filen $ {jobout} 2 >> lägg till informationen från nuvarande stderrhanterare till filen $ {joberr}

jobout och joberr är filer, definierade som skriptets första och andra parameter

Svar

Eftersom det inte finns några parametrar för att anropa skriptet är parametrarna $1 och $2 tomma och så är det $jobout och $joberr.

Du måste ringa manuset så här:

./myscript.sh file1 file2 

Kommentarer

  • Parameternumren har inget att göra med siffrorna före >> omdirigeringsoperatorer .
  • Tänk, jag ser att du ' svarar på delen om den tvetydiga omdirigeringen, inte i frågan i titeln. Du bör nog göra ditt svar tydligare om detta.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *