Eu tenho o seguinte script bash, pelo que entendo >> é usado para anexar a saída de um comando a um arquivo existente em vez de substituir, mas o que está fazendo nesse caso? Este script está chamando alguns arquivos exe para converter de um formato para outro. Há muitos anos para cada arquivo, então ele percorre cada arquivo observando o nome do arquivo. Além disso, quando executo esse script, recebo "redirecionamento ambíguo"
#!/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
fonte
fonte
Respostas:
1>>
e2>>
são redirecionamentos para descritores de arquivos específicos, neste caso, a saída padrão (descritor de arquivo 1) e erro padrão (descritor de arquivo 2).Portanto, o script está redirecionando todas as mensagens "padrão" para
${jobout}
e todas as mensagens de erro para${joberr}
. Usar>>
nos dois casos significa que todas as mensagens são anexadas aos respectivos arquivos.Observe que
${jobout}
e${joberr}
leve seus valores dos dois parâmetros da linha de comando para o script (${1}
e${2}
), portanto, você deve especificar os arquivos que deseja usar para armazenar as mensagens. Se os parâmetros não forem fornecidos, o script produzirá a mensagem de erro "redirecionamento ambíguo" que você viu; o script realmente deve verificar se os parâmetros foram fornecidos e produzir uma mensagem de erro apropriada, caso contrário, algo comono início do script.
fonte
No seu caso, 1 >> anexa as informações do manipulador stdout atual ao arquivo $ {jobout} 2 >> anexa as informações do manipulador stderr atual ao arquivo $ {joberr}
jobout e joberr são arquivos, definidos como primeiro e segundo parâmetros do script
fonte
Como não há parâmetros em chamar o script os parâmetros
$1
e$2
estão vazios e por isso são$jobout
e$joberr
.Você deve chamar o script assim:
fonte
>>
operadores de redirecionamento.