У меня есть следующий скрипт bash, из того, что я понимаю >>, используется для добавления вывода команды в существующий файл вместо перезаписи, но что он делает в этом случае? Этот скрипт вызывает некоторые исполняемые файлы для преобразования из одного формата в другой. Для каждого файла существует много лет, поэтому он просматривает каждый файл, просматривая имя файла. Также, когда я запускаю этот скрипт, я получаю «неоднозначное перенаправление»
#!/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
Герман Зуб
источник
источник
Ответы:
1>>
и2>>
являются перенаправлениями для конкретных файловых дескрипторов, в этом случае стандартный вывод (файловый дескриптор 1) и стандартная ошибка (файловый дескриптор 2).Таким образом, скрипт перенаправляет все «стандартные» сообщения
${jobout}
и все сообщения об ошибках${joberr}
. Использование>>
в обоих случаях означает, что все сообщения добавляются в соответствующие файлы.Обратите внимание, что
${jobout}
и${joberr}
перенесите их значения из двух параметров командной строки в скрипт (${1}
и${2}
), поэтому вам нужно указать файлы, которые вы хотите использовать для хранения сообщений. Если параметры не заданы, скрипт выдаст сообщение об ошибке «неоднозначное перенаправление»; скрипт должен действительно проверить, были ли предоставлены параметры, и выдать соответствующее сообщение об ошибке, что-то вродев начале сценария.
источник
В вашем случае 1 >> добавьте информацию из текущего обработчика stdout в файл $ {jobout} 2 >> добавьте информацию из текущего обработчика stderr в файл $ {joberr}
jobout и joberr - это файлы, определенные как первый и второй параметр скрипта
источник
Поскольку при вызове скрипта нет параметров, параметры
$1
и$2
являются пустыми, и поэтому являются$jobout
и$joberr
.Вы должны вызвать скрипт так:
источник
>>
операторами перенаправления.