>>は、既存のファイルを上書きせずにコマンド出力を追加するために使用されることを理解する次の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
1>>
2>>
特定のファイル記述子(この場合は標準出力(ファイル記述子1)と標準エラー(ファイル記述子2))にリダイレクトされます。
したがって、スクリプトはすべての「標準」メッセージをにリダイレクトし${jobout}
、すべてのエラーメッセージをにリダイレクトします${joberr}
。どちらの場合も、>>
すべてのメッセージがそのファイルに追加されます。
${jobout}
とは、2つのコマンドライン引数からスクリプトの${joberr}
値(${1}
および${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
スクリプトの始めに。
答え2
あなたの場合1>>現在のstdoutハンドラの情報を$ {jobout}ファイルに追加します。 2>>現在のstderrハンドラの情報を$ {joberr}ファイルに追加します。
joboutとjoberrは、スクリプトの最初と2番目のパラメータで定義されたファイルです。
答え3
パラメータなしでスクリプトが呼び出されるため、パラメータは空である$1
ため$2
空白$jobout
です$joberr
。
次のようにスクリプトを呼び出す必要があります。
./myscript.sh file1 file2