スクリプト「postprocessing.sh」があります。このスクリプトは、「npo」と呼ばれる親プログラムによって呼び出される、熱水力シミュレーション パッケージのデータ出力の後処理に使用することを想定しています。
以下のコードは、データ ファイル "MELC.PTF" 内のデータ ベクトル "CFVALU_10000202" を検索することを想定しています。データ ベクトルをファイル "DATA1" に書き込み、少し簡単な後処理を実行し、最後に結果を "ext.xml" に書き込みます。 .goal1".
そのために、多くの関数 (MREAD、g0.s0 の書き込み、基本的に aptplot1.gr に書き込まれるすべて) が使用され、ファイル ツリーの別の部分にインストールされたプロット ツールの一部が使用されました。入力引数として aptplot1.gr を指定して aptbatch.sh を呼び出すときに、このプロット ツールを呼び出します。aptbatch.sh へのパスは、「.bashrc」ファイルのパス変数に保存されます。
「./postprocessing.sh」または「bash postprocessing」と入力して bash から以下のスクリプトを実行すると、期待どおりに動作します。ファイル DATA1、aptplot1.gr、および ext.goal1 が、現在の作業ディレクトリに正しい内容で生成されます。
「postprocessing.sh」を呼び出すプログラム「npo」を実行すると、aptplot1.gr がファイルに書き込まれますが、「DATA1」も「ext.goal1」も生成されません。「aptbatch.sh」を呼び出そうとすると、プログラムが停止します。「aptbatch.sh」を使用せずに「postprocessing.sh」を実験的に実行しようとすると、ランダム変数のセットをファイルに書き込むだけで問題なく動作するため、後処理スクリプトの呼び出しに問題はありません。
npo の作成者によると、プログラムはコマンド シェルを呼び出して、スクリプトの名前でシステム コマンドを発行する必要があります。
関連する実行可能ファイルのアクセス許可を調べてみて、ダイス以外のあらゆるものに chmod +x を適用しました。これを引き起こす可能性のあるシステム変数または許可権を考えられる人はいますか?
#! /bin/sh
cd ~/Melcor/NordicBWR/MinGoalFct/NordicBWR_05_08
# clean up
rm -f aptplot1* ext.goal1 DATA1*
# write read out commands for data vector to file
echo " MELCOR 0 PTF \"MELC.PTF\"" > aptplot1.gr
echo " MREAD 0 \"CFVALU_10000202\" DONE" >> aptplot1.gr
echo " write g0.s0 FILE \"./DATA1\"" >> aptplot1.gr
# execute file
aptbatch.sh -batch aptplot1.gr -nosafe -hardcopy
# postprocessing of max. data value
awk 'BEGIN {max = 0} {if ($2>max) max=$2} {GF = max-10000} {if (GF<0) GF=10000-max} END {printf("%6.5f\n", GF ) } ' DATA1 > "ext.goal1"
概要:
スクリプトはコマンドラインから正常に実行され、スクリプトはプログラムによって呼び出されると aptbatch.sh で停止します (ただし、この場合でも aptbatch.sh 呼び出しなしで正常に動作します)。aptbatch.sh へのパスは .bashrc にあります。失敗した実行中に生成された aptplot1.gr を使用して「aptbatch.sh -batch aptplot1.gr -nosafe -hardcopy」を実行すると、正常に動作します。
アイデア?