Fehler „Befehl nicht gefunden“ beim Ausführen eines Shell-Skripts

Fehler „Befehl nicht gefunden“ beim Ausführen eines Shell-Skripts
#!/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

Ich habe versucht, ein Shell-Skript auszuführen, aber der folgende Fehler wird angezeigt:

[gakubu@localhost Kenkyuu]$ pre.sh

/home/gakubu/FaSTAR2019/Bridget2019/Kenkyuu/pre.sh: Zeile 8: /home/gakubu/FaSTAR2019/Bridget2019/Kenkyuu/script.func: Es gibt keine solche Datei oder kein solches Verzeichnis /home/gakubu/FaSTAR2019/Bridget2019/Kenkyuu/pre.sh: Zeile 30: set_variables: Befehl nicht gefunden /home/gakubu/FaSTAR2019/Bridget2019/Kenkyuu/pre.sh: Zeile: read_input: Befehl nicht gefunden /home/gakubu/FaSTAR2019/Bridget2019/Kenkyuu/pre.sh: Zeile: make_dir: Befehl nicht gefunden

...

[gakubu@localhost Kenkyuu]$

enter code here

Was bedeutet das und wie behebe ich das?

Antwort1

Das Skript enthält in Zeile 8 den folgenden Code:

. ${FASTAR_DIR}/"script.func"

Dies bezieht eine Datei aus einem bestimmten Verzeichnis. Diese Datei enthält wahrscheinlich Shell-Funktionsdefinitionen. Die Datei wurde der Fehlermeldung zufolge nicht gefunden, und die Folge des Nichtfindens dieser Datei ist später, dass die darin definierten Funktionen nicht gefunden werden (dies sind die „Befehl nicht gefunden“-Fehler, die Sie erhalten).

Es wird davon ausgegangen, dass die Datei script.funcim selben Verzeichnis wie das Skript selbst verfügbar ist. Wenn Sie das Skript an seinen aktuellen Speicherort verschoben haben, aber vergessen haben, die script.funcDatei mitzuverschieben, ist dies die Fehlerursache.

Ich werde das Skript selbst nicht weiter kommentieren, sondern nur sagen, dass die Verwendung von Variablenerweiterungen ohne Anführungszeichen es sehr fehleranfällig und möglicherweise unsicher macht.

verwandte Informationen