Co znamená „1 > >` a `2 > >` znamená v bash skriptu?

Mám následující bash skript, z toho, čemu rozumím >>, se používá k přidání výstupu příkazu do existujícího souboru namísto přepsání, ale co dělá to v tomto případě? Tento skript volá některé soubory exe k převodu z jednoho formátu do druhého. Pro každý soubor existuje mnoho let, takže každý soubor prochází pohledem na název souboru. Také při spuštění tohoto skriptu dostanu „nejednoznačné přesměrování“

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

Komentáře

  • Jak se vám daří volat tento skript?
  • možný duplikát Ambigous redirect done > $ 2
  • @HaukeLaging, ne, není. Otázka se zdá být o něčem blízkém, ale ne o tom samém.
  • @RomeoNinov Nevadilo by vám vysvětlit relevantní rozdíl?
  • @HaukeLaging skript je uložen v souboru .sh. Jen napíšu ./myscript.sh

odpověď

1>> a 2>> jsou přesměrování pro konkrétní deskriptory souborů, v tomto případě standardní výstup (deskriptor souboru 1) a standardní chyba (deskriptor souboru 2).

Takže skript přesměrovává všechny „standardní“ zprávy na ${jobout} a všechny chybové zprávy na ${joberr}. Použití >> v obou případech znamená, že všechny zprávy jsou připojeny k příslušným souborům.

Upozorňujeme, že ${jobout} a ${joberr} převezme jejich hodnoty ze dvou parametrů příkazového řádku do skriptu (${1} a ${2}) , takže musíte určit soubory, které chcete použít k uložení zpráv. Pokud parametry nejsou dané, skript vytvoří chybovou zprávu „nejednoznačné přesměrování“, kterou jste viděli; skript by měl opravdu zkontrolovat, zda byly zadány parametry, a jinak vytvořit příslušnou chybovou zprávu, něco jako

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 

na začátku skriptu.

Odpověď

Ve vašem případě 1 >> připojte informace od aktuální obslužné rutiny stdout do souboru $ {jobout} 2 >> připojte informace ze současného obslužného programu stderr do souboru $ {joberr}

jobout a joberr jsou soubory definované jako první a druhý parametr skriptu

odpověď

Protože při volání skriptu neexistují žádné parametry, jsou parametry $1 a $2 prázdné a také jsou $jobout a $joberr.

Skript musíte zavolat takto:

./myscript.sh file1 file2 

Komentáře

  • Čísla parametrů nemají nic společného s čísly před >> operátory přesměrování .
  • Nevadí, vidím, že ' znovu odpovídáte na část o nejednoznačném přesměrování, nikoli na otázku v nadpisu. Pravděpodobně byste měli o tom objasnit svou odpověď.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *