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


15

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

このスクリプトをどのように呼び出しますか?
ハウケレイジング


@HaukeLaging、そうではありません。質問は何か近いもののようですが、同じではない
ロミオニノフ

@RomeoNinov関連する違いについて説明していただけますか?
ハウケレイジング

@HaukeLagingスクリプトは.shファイルに保存されます。「./myscript.sh」と入力するだけです
ハーマン・トゥーロット

回答:


19

1>>および2>>は、特定のファイル記述子、この場合は標準出力(ファイル記述子1)および標準エラー(ファイル記述子2)のリダイレクトです。

そのため、スクリプトはすべての「標準」メッセージをにリダイレクトし${jobout}、すべてのエラーメッセージをにリダイレクトしています${joberr}>>両方の場合に使用すると、すべてのメッセージがそれぞれのファイルに追加されます。

スクリプトの2つのコマンドラインパラメーター(および)から値${jobout}${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番目のパラメーターとして定義されます


1

そこにスクリプトを呼び出すにはパラメータのパラメータはありませんよう$1$2空とそうされている$jobout$joberr

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

./myscript.sh file1 file2

パラメータ番号は、>>リダイレクト演算子の前の番号とは関係ありません。
バーマー

気にしないでください、タイトルの質問ではなく、あいまいなリダイレクトに関する部分に答えていると思います。あなたはおそらくこれについてあなたの答えをより明確にする必要があります。
Barmar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.