Co oznacza `1 > >` i `2 > >` w skrypcie basha?

Mam następujący skrypt bash, z tego, co rozumiem, >> służy do dołączania danych wyjściowych polecenia do istniejącego pliku zamiast nadpisywania, ale co czy to robi w tym przypadku? Ten skrypt wywołuje niektóre pliki exe w celu konwersji z jednego formatu na inny. Każdy plik ma wiele lat, więc przegląda każdy plik w pętli, sprawdzając jego nazwę. Również po uruchomieniu tego skryptu pojawia się „niejednoznaczne przekierowanie”

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

Komentarze

  • Jak się masz wywołać ten skrypt?
  • możliwy duplikat Niejednoznaczne przekierowanie wykonane > $ 2
  • @HaukeLaging, nie, nie jest. Pytanie wydaje się dotyczyć czegoś bliskiego, ale nie tego samego
  • @RomeoNinov Czy mógłbyś wyjaśnić istotną różnicę?
  • @HaukeLaging skrypt jest zapisywany w pliku .sh. Po prostu wpisuję ./myscript.sh

Odpowiedź

1>> i 2>> to przekierowania do określonych deskryptorów plików, w tym przypadku standardowe wyjście (deskryptor pliku 1) i błąd standardowy (deskryptor pliku 2).

A więc skrypt przekierowuje wszystkie „standardowe” wiadomości do ${jobout}, a wszystkie komunikaty o błędach do ${joberr}. Użycie >> w obu przypadkach oznacza, że wszystkie wiadomości są dołączane do odpowiednich plików.

Pamiętaj, że ${jobout} i ${joberr} pobierają ich wartości z dwóch parametrów wiersza poleceń do skryptu (${1} i ${2}) , więc musisz określić pliki, których chcesz używać do przechowywania wiadomości. Jeśli parametry nie są podane, skrypt wygeneruje komunikat o błędzie „niejednoznacznego przekierowania”, który widziałeś; skrypt powinien naprawdę sprawdzić, czy parametry zostały podane i wygenerować odpowiedni komunikat o błędzie, w przeciwnym razie, np.

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 początku skryptu.

Odpowiedź

W twoim przypadku 1 >> dołącz informacje z bieżącego programu obsługi standardowego wyjścia do pliku $ {jobout} 2 >> dołącz informacje z aktualnego programu obsługującego stderr do pliku $ {joberr}

jobout i joberr to pliki, zdefiniowane jako pierwszy i drugi parametr skryptu

Odpowiedź

Ponieważ nie ma parametrów przy wywoływaniu skryptu, parametry $1 i $2 są puste i tak samo $jobout i $joberr.

Musisz wywołać skrypt w ten sposób:

./myscript.sh file1 file2 

Komentarze

  • Numery parametrów nie mają nic wspólnego z liczbami przed >> operatorami przekierowania .
  • Nieważne, widzę, że ' odpowiadasz na część dotyczącą niejednoznacznego przekierowania, a nie na pytanie w tytule. Prawdopodobnie powinieneś wyjaśnić swoją odpowiedź na ten temat.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *