쉘 스크립트 실행 시 '명령을 찾을 수 없음' 오류 발생

쉘 스크립트 실행 시 '명령을 찾을 수 없음' 오류 발생
#!/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함께 이동하는 것을 잊어버린 경우 이것이 오류의 원인이 됩니다.

따옴표가 없는 변수 확장을 사용하면 스크립트가 매우 취약해지고 안전하지 않을 수도 있다는 점만 언급하는 것 외에는 스크립트 자체에 대해 더 이상 언급하지 않겠습니다.

관련 정보