Mam następujący skrypt bash, z tego, co rozumiem, >> używa się do dołączenia wyniku polecenia do istniejącego pliku zamiast nadpisywania, ale co 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, patrząc na nazwę pliku. 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
bash
shell-script
io-redirection
Herman Toothrot
źródło
źródło
Odpowiedzi:
1>>
i2>>
są przekierowaniami dla określonych deskryptorów plików, w tym przypadku standardowego wyjścia (deskryptor pliku 1) i standardowego błędu (deskryptor pliku 2).Zatem skrypt przekierowuje wszystkie „standardowe” komunikaty
${jobout}
i wszystkie komunikaty o błędach do${joberr}
. Użycie>>
w obu przypadkach oznacza, że wszystkie wiadomości są dołączane do odpowiednich plików.Zauważ, że
${jobout}
i${joberr}
przenieś 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żyć do przechowywania wiadomości. Jeśli parametry nie zostaną podane, skrypt wyświetli komunikat o błędzie „niejednoznaczne przekierowanie”; skrypt powinien naprawdę sprawdzić, czy parametry zostały podane, i w przeciwnym razie wygenerować odpowiedni komunikat o błędziena początku skryptu.
źródło
W twoim przypadku 1 >> dołącz informacje z bieżącego modułu obsługi stdout do pliku $ {jobout} 2 >> dołącz informacje z bieżącego modułu obsługi stderr do pliku $ {joberr}
Jobout i Joberr są plikami, zdefiniowanymi jako pierwszy i drugi parametr skryptu
źródło
Ponieważ nie istnieją żadne parametry w wywołanie skryptu parametry
$1
i$2
są puste, a więc są$jobout
i$joberr
.Musisz wywołać skrypt w następujący sposób:
źródło
>>
operatorami przekierowania.