Bourne Shell ne trouve pas de commandes Unix sur le script

#!/bin/sh echo "Insert the directory you want to detail" read DIR #Get the files: FILES=`ls "$DIR" | sort` echo "Files in the list:" echo "$FILES" echo "" echo "Separating directories from files..." for FILE in $FILES do PATH=${DIR}"/$FILE" OUTPUT="Path: $PATH" if [ -f "$PATH" ]; then NAME=`echo "$FILE" | cut -d'.' -f1` OUTPUT=${OUTPUT}" (filename: $NAME" EXTENSION=`echo "$FILE" | cut -s -d'.' -f2` if [ ${#EXTENSION} -gt 0 ]; then OUTPUT=${OUTPUT}" - type: $EXTENSION)" else OUTPUT=${OUTPUT}")" fi elif [ -d "$PATH" ]; then OUTPUT=${OUTPUT}" (dir name: $FILE)" fi echo "$OUTPUT" done 

J’obtiens cette sortie lorsque je l’exécute (j’ai utilisé le chemin relatif et le chemin complet)

 $ ./problem.sh Insert the directory you want to detail . Files in the list: directoryExample problem.sh Separating directories from files... Path: ./directoryExample (dir name: directoryExample) ./problem.sh: cut: not found ./problem.sh: cut: not found Path: ./problem.sh (filename: ) $ $ $ ./problem.sh Insert the directory you want to detail /home/geppetto/problem Files in the list: directoryExample problem.sh Separating directories from files... Path: /home/geppetto/problem/directoryExample (dir name: directoryExample) ./problem.sh: cut: not found ./problem.sh: cut: not found Path: /home/geppetto/problem/problem.sh (filename: ) $ 

Comme vous pouvez le voir, j’ai reçu deux fois ” cut: not found ” lors de l’organisation de la chaîne de sortie des types de fichiers. Pourquoi? (J’utilise BSD gratuit)

PATH est la variable utilisée par le shell pour stocker la liste des répertoires contenant des commandes telles que cut . Vous avez écrasé la valeur de cette variable en perdant la liste initiale. La solution facile consiste à ne pas utiliser PATH dans votre boucle for . La réponse la plus complète consiste à éviter que tous les noms de variables ne contiennent que des lettres majuscules, celles-ci étant réservées à l’utilisation par le shell. Incluez au moins une lettre ou un chiffre minuscule dans tous vos propres noms de variable pour éviter d’interférer avec les variables actuelles (ou futures) utilisées par le shell.