Hva betyr `1 > >` og `2 > >` betyr i et bash-skript?

Jeg har følgende bash-skript, fra det jeg forstår >> brukes til å legge utgangen av en kommando til en eksisterende fil i stedet for å overskrive, men hva gjør det i dette tilfellet? Dette skriptet kaller noen exe-filer for å konvertere fra ett format til et annet. Det er mange år for hver fil, så den løper gjennom hver fil ved å se på filnavnet. Også når jeg kjører dette skriptet 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 gjør du kalle dette skriptet?
  • mulig duplikat av Omfattende omdirigering gjort > $ 2
  • @HaukeLaging, nei det er det ikke. Spørsmålet ser ut til å handle om noe nært, men ikke det samme
  • @RomeoNinov Har du noe imot å forklare den relevante forskjellen?
  • @HaukeLaging skriptet lagres i en .sh-fil. Jeg skriver bare ./myscript.sh

Svar

1>> og 2>> er omdirigeringer for spesifikke filbeskrivere, i dette tilfellet standardutdata (filbeskrivelse 1) og standardfeil (filbeskrivelse 2).

Så skriptet omdirigerer alle «standard» meldinger til ${jobout} og alle feilmeldinger til ${joberr}. Bruk av >> i begge tilfeller betyr at alle meldinger er lagt til de respektive filene.

Merk at ${jobout} og ${joberr} tar verdiene fra de to kommandolinjeparametrene til skriptet (${1} og ${2}) , så du må spesifisere filene du vil bruke til å lagre meldingene. Hvis parametrene ikke er gitt vil skriptet gi den «tvetydige omdirigering» -feilmeldingen du har sett; skriptet bør virkelig sjekke om parametrene er gitt og gi en passende feilmelding ellers, noe sånt 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 av skriptet.

Svar

I ditt tilfelle 1 >> legg til informasjonen fra gjeldende stdout-behandler til filen $ {jobout} 2 >> legg til informasjonen fra gjeldende stderr-behandler til filen $ {joberr}

jobout og joberr er filer, definert som første og andre parameter i skriptet

Svar

Siden det ikke er noen parametere i å ringe til skriptet, er parametrene $1 og $2 tomme, og det er også $jobout og $joberr.

Du må ringe skriptet slik:

./myscript.sh file1 file2 

Kommentarer

  • Parameternumre har ingenting å gjøre med tallene før >> omdirigeringsoperatorer .
  • Jeg bryr deg ikke, jeg ser deg ' du svarer på delen om den tvetydige viderekoblingen, ikke spørsmålet i tittelen. Du bør sannsynligvis gjøre svaret ditt tydeligere om dette.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *