
#!/bin/bash
# pre.sh revision 4.0.0 Date: 2011/12/24
### Path ###
FASTAR_DIR=$(cd $(dirname $0);pwd)
##### Function s #####
. ${FASTAR_DIR}/"script.func"
usage(){
echo "Usage: " $COMNAME " [option]"
echo " option : <NONE> ...... by 1 process"
echo " -n <CPUs> ... batch process by <CPUs> process"
echo " -all ........ batch process"
echo " -e .......... use exact wall distance mode"
echo " -metis ...... use pre-fastar metis version"
echo " -fsi ........ use pre-fastar metis version with FSI mode"
echo " -emetis ..... use pre-fastar metis version with exact wd mode"
echo " -efsi ....... use pre-fastar metis version with FSI and exact wd mode"
echo " -h .......... show this statement"
}
##### Function e #####
#======================================#
# Main #
#======================================#
#=== initialize ===#
COMNAME=`basename $0`
set_variables
if [ $# -eq 1 ]; then
case $1 in
"-all" | "-e" | "-metis" | "-fsi" | "-emetis" | "-efsi") opt=$1 ;;
"-h") usage; exit ;;
*) usage; exit ;;
esac
cpu=1
elif [ $# -eq 2 ]; then
case $1 in
"-n") opt=$1 ;;
*) usage; exit ;;
esac
if [ $2 -ge 1 ]; then
cpu=$2
else
cpu=1
fi
elif [ $# -gt 2 ]; then
usage; exit
else
opt="hoge"
cpu=1
fi
#=== read inputfile ===#
read_input
case $reorder in
".true." | ".TRUE." | "T" | "t")
reorder_check="TRUE"
;;
*)
reorder_check="FALSE"
;;
esac
#=== ABORT ===#
trap 'abort 1 $COMNAME' 1 2 3 9 15
#=== Make directories ===#
make_dir
#=== preprocess ===#
if test $opt = "-all" ;then
echo $NPREFAST...
rm -f $TMP_FILE
if [ $domain -ge 2 ]; then
n_loop=$domain
id=1
for ((id=1; id<=$n_loop; id++))
do
echo "$NPREFAST $id > $TMP_FILE$id &"
$PREFAST $id > $TMP_FILE$id &
done
wait
i=1
for ((i=1; i<=$domain; i++))
do
cat $TMP_FILE$i >> $TMP_FILE
rm -f $TMP_FILE$i
done
elif [ $domain -eq 1 ]; then
$PREFAST
echo ""
else
echo "ERROR: It is wrong that total number of domain in $INPUT."
exit
fi
elif test $opt = "-n"; then
echo $NPREFAST...
rm -f $TMP_FILE
n_loop=`expr $domain / $cpu`
id=1
i=1
for ((i=1; i<=$n_loop; i++))
do
var=`expr $cpu \* \( $i - 1 \) + 1`
id=$var
j=1
for ((j=1; j<=$cpu; j++))
do
echo "$NPREFAST $id > $TMP_FILE$id &"
$PREFAST $id > $TMP_FILE$id &
id=`expr $id + 1`
done
wait
done
if [ `expr $id - 1` -lt $domain ]; then
while [ $id -le $domain ];
do
echo "$NPREFAST $id > $TMP_FILE$id &"
$PREFAST $id > $TMP_FILE$id &
id=`expr $id + 1`
done
wait
fi
i=1
for ((i=1; i<=$domain; i++))
do
cat $TMP_FILE$i >> $TMP_FILE
rm -f $TMP_FILE$i
done
elif test $opt = "-e" ;then
echo $NPREFAST...
rm -f $TMP_FILE
$PREFAST -e
elif test $opt = "-metis" ;then
echo $NPREMETIS...
rm -f $TMP_FILE
$PREMETIS
elif test $opt = "-fsi" ;then
make_dir_fsi
echo $NPREMETIS...
rm -f $TMP_FILE
$PREMETIS FSI
elif test $opt = "-emetis" ;then
echo $NPREMETIS...
rm -f $TMP_FILE
$PREMETIS -e
elif test $opt = "-efsi" ;then
make_dir_fsi
echo $NPREMETIS...
rm -f $TMP_FILE
$PREMETIS -eFSI
else
echo $NPREFAST...
rm -f $TMP_FILE
$PREFAST
fi
#=== reorder ===#
case $reorder_check in
"TRUE")
echo $NREORDGRID...
$REORDGRID
echo $NREORDINDX...
$REORDINDX
;;
esac
exit
쉘 스크립트를 실행하려고 시도했지만 다음 오류가 나타납니다.
[gakubu@localhost Kenkuu]$ pre.sh
/home/gakubu/FaSTAR2019/Bridget2019/Kenkyou/pre.sh: 8행: /home/gakubu/FaSTAR2019/Bridget2019/Kenkyou/script.func: 해당 파일이나 디렉터리가 없습니다. /home/gakubu/FaSTAR2019/Bridget2019/Kenkyou /pre.sh: 30행: set_variables: 명령을 찾을 수 없음 /home/gakubu/FaSTAR2019/Bridget2019/Kenkyou/pre.sh: 행: read_input: 명령을 찾을 수 없음 /home/gakubu/FaSTAR2019/Bridget2019/Kenkyou/pre.sh: 줄: make_dir: 명령을 찾을 수 없습니다.
...
[gakubu@localhost 켄큐]$
enter code here
이것이 무엇을 의미하며 어떻게 해결합니까?
답변1
스크립트의 8행에는 다음 코드가 있습니다.
. ${FASTAR_DIR}/"script.func"
이는 특정 디렉토리의 파일을 소스로 합니다. 이 파일에는 쉘 함수 정의가 포함되어 있을 수 있습니다. 오류 메시지에 따르면 파일을 찾을 수 없으며 이 파일을 찾지 못하면 나중에 해당 파일이 정의한 기능을 찾을 수 없게 됩니다(이러한 "명령을 찾을 수 없음" 오류가 발생함).
파일은 script.func
스크립트 자체와 동일한 디렉터리에서 사용 가능한 것으로 가정됩니다. 스크립트를 현재 위치로 이동했지만 파일을 script.func
함께 이동하는 것을 잊어버린 경우 이것이 오류의 원인이 됩니다.
따옴표가 없는 변수 확장을 사용하면 스크립트가 매우 취약해지고 안전하지 않을 수도 있다는 점만 언급하는 것 외에는 스크립트 자체에 대해 더 이상 언급하지 않겠습니다.