2013-10-06 5 views
0

У меня возникли проблемы с некоторым кодом, он говорит, что файл не существует, когда я знаю, что он это делает. Код выглядит следующим образом:": Нет такого файла или каталога", когда файл существует

#! /bin/ksh 
echo "Enter a file name" 
read fileName 
if [ -e $fileName ];then 
    less -M $fileName 
    gedit $fileName 
else 
    echo "$fileName is not a file" 
fi 

Я почти наверняка пропустил что-то стало очевидным ... Я просто хочу, чтобы я знал, что это было. В любом случае, любая помощь будет принята с благодарностью.

+0

Вы проверить, что файл существует, не то, что это не каталог, а не то, что это для чтения или записи. Я также не понимаю, что это будет делать с символической ссылкой, которая ничего не указывает. Также укажите точное сообщение об ошибке, и в идеале, какая команда запросила его. Наконец, вводится ли имя файла в виде метасимволов с пробелом или оболочкой? –

+0

Привет, Майк, спасибо за ваш ответ. Значит, ты говоришь, что мне нужна новая команда вместо -e? Что касается ошибки, то полученная ошибка: «: Нет такого файла или каталога» и появляется после того, как имя файла было введено без символов пробела, например. owen.txt Еще раз спасибо –

+2

Используйте '-f' для проверки простого файла (или символической ссылки на файл), в отличие от каталога' -d', блочного устройства '-b', символьного устройства' c', symlink '-L' или' -h', FIFO ('-p', mnemonic 'named Pipe') и т. Д. Используйте' -s' для проверки непустого файла. –

ответ

0

Я вижу два варианта здесь:

  1. опечатка в имени переменной
  2. Нажатие Enter без имени файла.

В любом случае это может быть решена путем добавления set -u в верхней части сценария, или с помощью расширения параметров с помощью теста: ${...:?}

Наконец, это лучше иметь дело с исключениями, во-первых, и попытаться сообщите, что на самом деле происходит. Сообщение об ошибке в исходном скрипте далеки от фактического теста и не отражает то, что сделал тест. В этом случае лучше сообщить системе, что не так.

Ниже приведен пример

#! /bin/ksh 
echo "Enter a file name" 
read fileName && [[ -e ${fileName:?} ]] || exit 

less -M ${fileName:?} || exit 
gedit ${fileName:?} 
Смежные вопросы