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.