web-dev-qa-db-ja.com

bashスクリプトで「1 >>」と「2 >>」はどういう意味ですか?

私が理解していることから、次の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
15
Herman Toothrot

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

スクリプトの開始時。

19
Stephen Kitt

あなたのケースでは1 >>現在のstdoutハンドラからの情報をファイル$ {jobout}に追加します2 >>現在のstderrハンドラからの情報をファイル$ {joberr}に追加します

joboutとjoberrはファイルで、スクリプトの最初と2番目のパラメーターとして定義されています

2
Romeo Ninov

スクリプトの呼び出しにはパラメーターがないため、パラメーター$1および$2は空であり、$joboutおよび$joberrも空です。

次のようにスクリプトを呼び出す必要があります。

./myscript.sh file1 file2
1
Hauke Laging