저는 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
여기서 하고 싶은 것은 새로운 스크립트(텍스트 파일)를 생성하고, 실행하고 싶은 부분만 복사하는 것입니다.
상단의 내보내기 동작은 나머지 스크립트에 대한 변수를 설정하며 여러 위치에서 사용될 수 있습니다. 모두 복사하거나 원하는 항목만 선택하세요. 여분의 것들은 아무런 피해도 입히지 않습니다.
그런 다음 스크립트의 두 번째 부분을 복사합니다. 메뉴가 필요하지 않습니다.
나는 무엇이 무엇인지 더 명확하게 하기 위해 코딩 스타일을 자유롭게 변경했습니다. 특히 ";"를 개행 문자로 바꾸고 적절한 들여쓰기를 추가했습니다. 대화형 쉘 프롬프트에서 명령을 함께 문자열로 묶기 위해 ";"를 사용하는 것은 좋지만 가장 간단한 경우에 스크립트를 난독화하는 것 외에는 거의 목적이 없습니다.
마지막으로 텍스트 파일은 다음과 같습니다.
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