私が理解していることから、次のbashスクリプトがあります>>は、上書きの代わりに既存のファイルにコマンドの出力を追加するために使用されますが、この場合は何をしているのですか?このスクリプトは、いくつかのexeファイルを呼び出して、ある形式から別の形式に変換します。各ファイルには何年もあるので、ファイル名を見て各ファイルをループします。また、このスクリプトを実行すると、「あいまいなリダイレクト」が発生します
#!/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
1>>
および2>>
は、特定のファイル記述子のリダイレクトです。この場合、標準出力(ファイル記述子1)および標準エラー(ファイル記述子2)です。
したがって、スクリプトはすべての「標準」メッセージを${jobout}
にリダイレクトし、すべてのエラーメッセージを${joberr}
にリダイレクトします。両方の場合で>>
を使用すると、すべてのメッセージがそれぞれのファイルに追加されます。
${jobout}
と${joberr}
は、2つのコマンドラインパラメータからスクリプトに値(${1}
and ${2}
)を取得するため、使用するファイルを指定する必要があることに注意してください。メッセージを保存します。パラメータが指定されていない場合、スクリプトは「あいまいなリダイレクト」エラーメッセージを表示します。スクリプトは、パラメーターが指定されているかどうかを実際に確認し、そうでない場合は適切なエラーメッセージを生成する必要があります。
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
スクリプトの開始時。
あなたのケースでは1 >>現在のstdoutハンドラからの情報をファイル$ {jobout}に追加します2 >>現在のstderrハンドラからの情報をファイル$ {joberr}に追加します
joboutとjoberrはファイルで、スクリプトの最初と2番目のパラメーターとして定義されています
スクリプトの呼び出しにはパラメーターがないため、パラメーター$1
および$2
は空であり、$jobout
および$joberr
も空です。
次のようにスクリプトを呼び出す必要があります。
./myscript.sh file1 file2