В течение многих лет я привык редактировать сценарии Perl CGI в «vi» и одновременно открывать браузер для их тестирования. В последнее время я получаю «500» ошибок сервера, когда я это делаю, и когда я запускаю сценарий из оболочки, я получаю «плохой интерпретатор: текстовый файл занят». Единственное решение - выходить из "vi" всякий раз, когда я хочу протестировать сценарий, что является большой болью и должен быть совершенно ненужным. Что с этим? У меня есть сервер Debian, который я регулярно обновляю, и я предполагаю, что он начался с так называемого «обновления» :)
Кажется, у вас Эта проблема, потому что в какой-то момент nvi
начал открывать файлы O_RDWR
вместо того O_RDONLY
.
Если ваш vi
на самом деле nvi
, Я бы попробовал использовать другой vi
, сказать vim
.
Мы сталкиваемся с этим при редактировании CGI ...
#! строка интерпретатора каким-то образом получает Ctrl-M,
рендеринг исполняемого файла не найден.
Это похоже на ошибку Perl, но на самом деле это строка интерпретатора she-bang, имеющая в конце «почти» невидимые символы.
В нашем случае мы обнаружили это после того, как файл был записан. попробуйте использовать команду dos2unix для копирования на другое имя и попробуйте нажать это. Если это работает, вы нашли свою первопричину.
Сожалею, что у меня нет реального обходного пути, кроме как распознавать проблему, когда я ее вижу.
--edit - Обычно наше сообщение об ошибке: имя_сценария: файл не найден, а НЕ "файл занят", упомянутый в вопросе.
Это странно. Вы пишете его перед попыткой обновить?
Кроме того, можете ли вы "перехватить" файл, пока он открыт?