Hvad betyder `1 > >` og `2 > >` betyder i et bash-script?

Jeg har følgende bash-script, fra hvad jeg forstår >> bruges til at føje output fra en kommando til en eksisterende fil i stedet for at overskrive, men hvad gør det i dette tilfælde? Dette script kalder nogle exe-filer til at konvertere fra et format til et andet. Der er mange år for hver fil, så den løber gennem hver fil ved at se på filnavnet. Også når jeg kører dette script får jeg “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

  • Hvordan har du det kalde dette script?
  • mulig duplikat af Omfattende omdirigering udført > $ 2
  • @HaukeLaging, nej det er det ikke. Spørgsmålet ser ud til at handle om noget tæt, men ikke det samme
  • @RomeoNinov Har du noget imod at forklare den relevante forskel?
  • @HaukeLaging scriptet gemmes i en .sh-fil. Jeg skriver bare ./myscript.sh

Svar

1>> og 2>> er omdirigeringer til specifikke filbeskrivere, i dette tilfælde standardoutput (filbeskrivelse 1) og standardfejl (filbeskrivelse 2).

Så scriptet omdirigerer alle “standard” -meddelelser til ${jobout} og alle fejlmeddelelser til ${joberr}. Brug af >> betyder i begge tilfælde, at alle meddelelser føjes til de respektive filer.

Bemærk, at ${jobout} og ${joberr} tager deres værdier fra de to kommandolinjeparametre til scriptet (${1} og ${2}) , så du skal angive de filer, du vil bruge til at gemme meddelelserne. Hvis parametrene ikke gives, vil scriptet frembringe den “tvetydige omdirigering” -fejlmeddelelse, du har set; scriptet skal virkelig kontrollere, om parametrene er leveret og producere en passende fejlmeddelelse ellers, noget 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 starten af scriptet.

Svar

I dit tilfælde 1 >> tilføj oplysningerne fra nuværende stdout-handler til filen $ {jobout} 2 >> tilføj oplysningerne fra nuværende stderr-handler til filen $ {joberr}

jobout og joberr er filer, defineret som første og anden parameter i scriptet

Svar

Da der ikke er nogen parametre til at kalde scriptet, er parametrene $1 og $2 tomme, og det samme er $jobout og $joberr.

Du skal kalde scriptet sådan:

./myscript.sh file1 file2 

Kommentarer

  • Parameternumre har intet at gøre med tallene før >> omdirigeringsoperatorer .
  • Jeg er ligeglad, jeg ser dig ' du besvarer delen om den tvetydige omdirigering, ikke spørgsmålet i titlen. Du bør sandsynligvis gøre dit svar klarere om dette.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *