Mitä `1 > >` ja `2 > >` tarkoittavatko bash-komentosarjassa?

Minulla on seuraava bash-komentosarja, josta ymmärrän >> käytetään komennon lähdön liittämiseen olemassa olevaan tiedostoon korvaamisen sijaan, mutta mitä tekeekö se tässä tapauksessa? Tämä komentosarja kutsuu joitain exe-tiedostoja muunnettavaksi muodosta toiseen. Kullekin tiedostolle on monta vuotta, joten se selaa tiedostoja läpi katsomalla tiedostonimeä. Myös kun suoritan tämän komentosarjan, saan ”epäselvän uudelleenohjauksen”

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

kommentit

  • Kuinka voit kutsutaan tätä komentosarjaa?
  • mahdollinen kopio Ambigous uudelleenohjaus tehty > $ 2
  • @HaukeLaging, ei se ei ole. Kysymys näyttää olevan jotain läheisestä, mutta ei samasta.
  • @RomeoNinov Haluatko selittää asiaankuuluvan eron?
  • @HaukeLaging komentosarja tallennetaan .sh-tiedostoon. Kirjoitan vain ./myscript.sh

vastaus

1>> ja 2>> ovat uudelleenohjauksia tietyille tiedostokuvaajille, tässä tapauksessa vakiotuloste (tiedostokuvaaja 1) ja vakiovirhe (tiedostokuvaaja 2).

Joten komentosarja ohjaa kaikki ”tavalliset” viestit osoitteeseen ${jobout} ja kaikki virheilmoitukset ${joberr}. Käyttämällä >> molemmissa tapauksissa kaikki viestit liitetään vastaaviin tiedostoihin.

Huomaa, että ${jobout} ja ${joberr} vievät arvot komentoriviparametreista komentosarjaan (${1} ja ${2}) , joten sinun on määritettävä tiedostot, joita haluat käyttää viestien tallentamiseen. Jos parametreja ei anneta, komentosarja tuottaa ”epäselvän uudelleenohjauksen” -virhesanoman, jonka olet nähnyt; komentosarjan tulisi todella tarkistaa, onko parametrit annettu, ja tuottaa muuten asianmukainen virheilmoitus, esimerkiksi

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 

komentosarjan alussa. >

Vastaa

Sinun tapauksessasi 1 >> liitä nykyisen vakiokäsittelijän tiedot tiedostoon $ {jobout} 2 >> lisää tiedot nykyisestä stderr-käsittelijästä tiedostoon $ {joberr}

joboutr ja joberr ovat tiedostoja, jotka on määritelty komentosarjan ensimmäiseksi ja toiseksi parametriksi

Vastaus

Koska komentosarjan kutsumisessa ei ole parametreja, parametrit $1 ja $2 ovat tyhjiä ja niin ovat $jobout ja $joberr.

Sinun on kutsuttava komentosarjaa näin:

./myscript.sh file1 file2 

kommentit

  • Parametrinumeroilla ei ole mitään tekemistä >> uudelleenohjausoperaattoreita edeltävien numeroiden kanssa .
  • Ei väliä, näen ' vastaavan epäselvää uudelleenohjausta koskevaan osaan, ei otsikossa olevaan kysymykseen. Sinun pitäisi todennäköisesti tehdä vastauksestasi selvempi tästä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *