
私はLinuxに初めてアクセスし、2部だけを実行するように(1部を除く)次のスクリプトを調整しようとしています。
fail () {
echo Execution aborted.
read -n1 -r -p "Press any key to continue..." key
exit 1
}
# "name" and "dirout" are named according to the testcase
export name=case
export dirout=${name}_out
export diroutdata=${dirout}/data
# "executables" are renamed and called from their directory
export dirbin=$HOME/DualSPHysics/bin/linux
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${dirbin}
export gencase="${dirbin}/GenCase_linux64"
export dualsphysicscpu="${dirbin}/DualSPHysics5.0CPU_linux64"
export dualsphysicsgpu="${dirbin}/DualSPHysics5.0_linux64"
export boundaryvtk="${dirbin}/BoundaryVTK_linux64"
export partvtk="${dirbin}/PartVTK_linux64"
export partvtkout="${dirbin}/PartVTKOut_linux64"
export measuretool="${dirbin}/MeasureTool_linux64"
export computeforces="${dirbin}/ComputeForces_linux64"
export isosurface="${dirbin}/IsoSurface_linux64"
export flowtool="${dirbin}/FlowTool_linux64"
export floatinginfo="${dirbin}/FloatingInfo_linux64"
option=-1
if [ -e $dirout ]; then
while [ "$option" != 1 -a "$option" != 2 -a "$option" != 3 ]
do
echo -e "The folder "${dirout}" already exists. Choose an option.
[1]- Delete it and continue.
[2]- Execute post-processing.
[3]- Abort and exit.
"
read -n 1 option
done
else
option=1
fi
# PART 1
if [ $option -eq 1 ]; then
# "dirout" to store results is removed if it already exists
if [ -e ${dirout} ]; then rm -r ${dirout}; fi
# CODES are executed according the selected parameters of execution in this testcase
${gencase} ${name}_Def ${dirout}/${name} -save:all
if [ $? -ne 0 ] ; then fail; fi
${dualsphysicsgpu} -gpu ${dirout}/${name} ${dirout} -dirdataout data -svres
if [ $? -ne 0 ] ; then fail; fi
fi
# PART 2
if [ $option -eq 2 -o $option -eq 1 ]; then
export dirout2=${dirout}/particles
${partvtk} -dirin ${diroutdata} -savevtk ${dirout2}/PartFluid -onlytype:-all,fluid -vars:+idp,+vel,+rhop,+press,+vor
if [ $? -ne 0 ] ; then fail; fi
${partvtk} -dirin ${diroutdata} -savevtk ${dirout2}/PartSquare -onlytype:-all,moving
if [ $? -ne 0 ] ; then fail; fi
${partvtkout} -dirin ${diroutdata} -savevtk ${dirout2}/PartFluidOut -SaveResume ${dirout2}/_ResumeFluidOut
if [ $? -ne 0 ] ; then fail; fi
export dirout2=${dirout}/MeasureElevation
${measuretool} -dirin ${diroutdata} -filexml ${dirout}/case.xml -savecsv ${dirout2}/MeasureSWL -points /scratch/gpfs/hse/DualSPHysics/IASS/points.txt -vars:-all -height
if [ $? -ne 0 ] ; then fail; fi
fi
if [ $option != 3 ];then
echo All done
else
echo Execution aborted
fi
read -n1 -r -p "Press any key to continue..." key
パート2を選択せずに自動的に実行できますか?
slurmを介してスクリプトを実行しましたが、実行方法が表示されないか、オプションが選択できないため、パート2が自動的に実行されるようにしたいと思います。
答え1
ここでやりたいことは、新しいスクリプト(テキストファイル)を生成し、実行したい部分だけをコピーすることです。
上部のエクスポート動作は、残りのスクリプトの変数を設定し、複数の場所で使用できます。すべてコピーするか、必要なもののみを選択してください。余分なものはダメージを与えません。
次に、スクリプトの2番目の部分をコピーします。メニューは必要ありません。
私は何が何であるかをより明確にするためにコーディングスタイルを自由に変更しました。特に「;」を改行文字に置き換え、適切なインデントを追加しました。インタラクティブシェルプロンプトでは、コマンドを文字列にまとめるために ";"を使用することをお勧めしますが、最も簡単な場合にスクリプトを難読化する以外にはほとんど目的はありません。
最後に、テキストファイルは次のようになります。
fail () {
echo Execution aborted.
read -n1 -r -p "Press any key to continue..." key
exit 1
}
# "name" and "dirout" are named according to the testcase
export name=case
export dirout=${name}_out
export diroutdata=${dirout}/data
# "executables" are renamed and called from their directory
export dirbin=$HOME/DualSPHysics/bin/linux
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${dirbin}
export gencase="${dirbin}/GenCase_linux64"
export dualsphysicscpu="${dirbin}/DualSPHysics5.0CPU_linux64"
export dualsphysicsgpu="${dirbin}/DualSPHysics5.0_linux64"
export boundaryvtk="${dirbin}/BoundaryVTK_linux64"
export partvtk="${dirbin}/PartVTK_linux64"
export partvtkout="${dirbin}/PartVTKOut_linux64"
export measuretool="${dirbin}/MeasureTool_linux64"
export computeforces="${dirbin}/ComputeForces_linux64"
export isosurface="${dirbin}/IsoSurface_linux64"
export flowtool="${dirbin}/FlowTool_linux64"
export floatinginfo="${dirbin}/FloatingInfo_linux64"
# PART 2
export dirout2=${dirout}/particles
${partvtk} -dirin ${diroutdata} -savevtk ${dirout2}/PartFluid -onlytype:-all,fluid -vars:+idp,+vel,+rhop,+press,+vor
if [ $? -ne 0 ]
then
fail
fi
${partvtk} -dirin ${diroutdata} -savevtk ${dirout2}/PartSquare -onlytype:-all,moving
if [ $? -ne 0 ]
then
fail
fi
${partvtkout} -dirin ${diroutdata} -savevtk ${dirout2}/PartFluidOut -SaveResume ${dirout2}/_ResumeFluidOut
if [ $? -ne 0 ]
then
fail
fi
export dirout2=${dirout}/MeasureElevation
${measuretool} -dirin ${diroutdata} -filexml ${dirout}/case.xml -savecsv ${dirout2}/MeasureSWL -points /scratch/gpfs/hse/DualSPHysics/IASS/points.txt -vars:-all -height
if [ $? -ne 0 ]
then
fail
fi
次に、ファイルを次のように実行可能にします。
chmod +x my_part2_script
最後に、次のように実行します。
./my_part2_script