私が作成したこの質問から、コマンドの同じファイルで複数の入力を出力として使用しようとしています
BASH、SHELLスクリプトの入力としてオブジェクトをループする
ユーザー Konsolebox と他のすべてのユーザーは、プロセスを改善して操作する方法を理解するのに非常に役立ちました. 彼らの提案の後、私は彼らの意見を取り入れ、コードを変更しようとしましたが、うまくいかないようです。
コードの仕事は、時間や月が異なる複数のアイテムを取得し、それらを入力ファイルとして bash コマンドに入力して、1 つの出力ファイルを生成することです。
提案された提案により、コードを次のように変更しました。
fname2="trim"
years=({2000..2010})
months=(01 02) ## ({01..100}) should be the same
end="nc"
私はそれを機能させようとしてきましたが、何を変更しても同じエラーが発生します
cdo mergetime: Open failed on >@({2010})@(01<
No such file or directory
bashスクリプトを作業フォルダーに配置し、ファイルに名前trim201001.nc
を付けましたtrim201002.nc
(通常、その形式で数百あるため、それらを自動化しようとしています)
コマンドでスクリプトを実行しています./script.sh
konsoleboxのアドバイスの後、私は追加しましたshopt -s nullglob
shopt -s extglob
shopt -s nullglob
#IFS='|' eval 'pattern="${fname2}@(${years[*]})@(${months[*]}).${end}"'
IFS='|' eval 'pattern="${fname2}$years@(${months[*]}).${end}"'
echo "pattern = ${pattern}"
files=($pattern) ## pathname expansion is sorted in Bash.
cdo mergetime "${files[@]}" ofile
そして、私が思う新しいエラーは月の読みにあると思いますが、私の場所を確認しましたが、使用されるファイルは02(月)と01(月)です
pattern = @(2010)@(01|02).nc
cdo mergetime: Open failed on >02).nc<
No such file or directory