2009-11-25 9 views
0

Возможно, это самый тупой вопрос в мире, но у меня есть серьезные проблемы с ним и вы можете использовать помощь. Я пытаюсь запустить скрипт perl на linux. Это простой скрипт для редактирования текста, ничего необычного. Я задумался над этим, и я обнаружил, что мне пришлось chmod +x, а затем просто запустить myscript.pl в консоли. Поскольку он должен изменить текстовый файл, я сделал myscript.pl > myfile.txt после chmoding егоКак исправить «bash: perl myscript.pl: command not found»?

Но это не работает. Я получаю: bash: perl myscript.pl: command not found

+0

myscript.pl> myfile.txt перезаписывает содержимое myfile.txt с выходом из сценария , что может и не быть тем, что вы намеревались. – SpoonMeiser

+1

Просьба указать первые несколько строк 'myscript.pl'? – Ether

ответ

2

Это не похоже, что perl установлен на вашей Linux-машине. Получаете ли вы то же самое, когда пытаетесь это сделать: # perl -e 'print "hi";'?

+0

он печатает привет;) – Nii

+0

Хорошо, круто тогда это означает, что у Кираэля есть правильный ответ. Сценарий имеет плохой путь к исполняемому файлу perl. – BryanD

7

Если myscript.pl не указан в вашем пути, вам необходимо указать текущий каталог.

$ ./myscript.pl 

Вы можете проверить, если текущий каталог находится в вашем пути с $ echo $PATH. Если вы часто используете этот скрипт, вы можете поместить его в путь, переместив его в каталог, который является частью вашего пути, обычно ~/bin.

Или добавив текущий каталог в переменную среды $ PATH. Инструкции см. В документации для вашей оболочки.

+2

Объяснение: У машин Linux есть набор переменных среды, называемый 'PATH', который имеет список каталогов для поиска команд. Вам нужно использовать dot-slash, чтобы сказать ему, чтобы он смотрел в текущем каталоге для запуска файла. –

+2

Проблема в этом ответе не соответствует полученному сообщению об ошибке. – Ether

+0

@ Едва, похоже, что вы правы. Но Баш обычно не дает аргументов в ошибке. Странно, что ошибка печатает аргументы. Может быть, что perl не находится в пути, но это тоже не соответствует ошибке. – EmFi

5

Можете ли вы разместить первые несколько строк своего сценария?

В частности, если у вас есть #!/usr/bin/perl, есть ли опечатки на этой линии, дополнительные пробелы и т. Д.?

Также сделайте ls /usr/bin/perl (или что-то еще на этой линии), чтобы убедиться, что он на самом деле там.

+1

Кроме того, если/usr/bin/perl есть (или какой бы путь он ни был), как показано в ls, рассмотрите удаление всей строки и повторное ее ввод. Это длинный снимок, но «невидимые персонажи» - редкая, но тонкая и пагубная проблема. Если вы удалите и повторно напечатаете строку, вы легко устраните их возможность :) – Chirael

+0

Попробуйте perl -c myscript.pl из командной строки, и если это работает, попробуйте просто perl myscript.pl и сообщите нам, что происходит для обоих , – Chirael

+1

В дополнение к 'ls/usr/bin/perl', это может помочь найти первый интерпретатор Perl в его PATH с' which perl' – Telemachus

2

As Chirael said, это звучит как ваша строка shebang (директива в верхней части файла, которая сообщает оболочке, как запускать скрипт) некорректна. Вы можете обойти хижину строку целиком, вызывая сценарий как:

perl myscript.pl > myfile.txt 

Вам также не нужно, чтобы установить исполняемый бит скрипта, так как при таком способе вызова, вы только прочитав сценарий, не выполнив его (с точки зрения оболочки).

+0

Это работа, но я думаю, что комментарий Манни о моем ответе - правильное решение. В том, что вся команда была вызвана в кавычки. – EmFi

0

В соответствии с этим thread это может быть из другого представления новой строки.

Вы написали сценарий в окне окна и скопировали его в свою линукс?

Каков ваш текстовый редактор?

0

У меня была такая же проблема, и проследил ее до конца строки DOS (^ M). Запуск dos2unix в файле .pl исправил проблему.

0

Пожалуйста, используйте, ./myperl.pl> outfile.txt дать пути к текущему каталогу благодаря

Смежные вопросы