Ce înseamnă `1 > >` și `2 > >` înseamnă într-un script bash?

Am următorul script bash, din ceea ce înțeleg >> este folosit pentru a atașa ieșirea unei comenzi la un fișier existent în loc de suprascriere, dar ce se descurcă în acest caz? Acest script apelează unele fișiere exe pentru a converti de la un format la altul. Există mulți ani pentru fiecare fișier, deci parcurge fiecare fișier uitându-se la numele fișierului. De asemenea, când rulez acest script, primesc „redirecționare ambiguă”

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

Comentarii

  • Cum faci numiți acest script?
  • posibil duplicat al Redirecționare ambiguă efectuată > $ 2
  • @HaukeLaging, nu, nu este. Întrebarea pare să fie despre ceva apropiat, dar nu același lucru
  • @RomeoNinov V-ar deranja să explicați diferența relevantă?
  • @HaukeLaging scriptul este salvat într-un fișier .sh. Tastez doar ./myscript.sh

Răspuns

1>> și 2>> sunt redirecționări pentru descriptori de fișiere specifici, în acest caz ieșirea standard (descriptorul de fișier 1) și eroarea standard (descriptorul de fișier 2).

Deci scriptul redirecționează toate mesajele „standard” către ${jobout} și toate mesajele de eroare către ${joberr}. Utilizarea >> în ambele cazuri înseamnă că toate mesajele sunt atașate fișierelor respective.

Rețineți că ${jobout} și ${joberr} își ia valorile din cei doi parametri din linia de comandă către script (${1} și ${2}) , deci trebuie să specificați fișierele pe care doriți să le utilizați pentru a stoca mesajele. Dacă parametrii nu sunt dați, scriptul va produce mesajul de eroare „redirecționare ambiguă” pe care l-ați văzut; scriptul ar trebui să verifice dacă parametrii au fost furnizați și să producă un mesaj de eroare adecvat în caz contrar, ceva de genul

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 

la începutul scriptului.

Răspuns

În cazul dvs. 1 >> adăugați informațiile din handler-ul curent stdout la fișierul $ {jobout} 2 >> adăugați informațiile de la stderr handler curent la fișierul $ {joberr}

jobout și joberr sunt fișiere, definite ca primul și al doilea parametru al scriptului

Răspuns

Deoarece nu există parametri în apelarea scriptului, parametrii $1 și $2 sunt goi și la fel sunt $jobout și $joberr.

Trebuie să apelați scriptul astfel:

./myscript.sh file1 file2 

Comentarii

  • Numerele parametrilor nu au nimic de-a face cu numerele dinaintea >> operatorilor de redirecționare .
  • Nu contează, vă văd ' răspunzând la partea despre redirecționarea ambiguă, nu la întrebarea din titlu. Probabil că ar trebui să vă clarificați răspunsul în legătură cu acest lucru.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *