Bash-скрипт выводит «Команду не найдено» в пустых строках - PullRequest
95 голосов
/ 09 сентября 2011

Каждый раз, когда я запускаю скрипт, используя bash scriptname.sh из командной строки в Debian, я получаю Command Not found и затем результат скрипта.

Сценарий работает, но всегда есть Command Not Foundвыписка выводится на экран для каждой пустой строки.Каждая пустая строка приводит к тому, что команда не найдена.

Я запускаю скрипт из папки /var.

Вот скрипт:

#!/bin/bash

echo Hello World

Iзапустите его, набрав следующее:

bash testscript.sh

Почему это произойдет?

Ответы [ 16 ]

148 голосов
/ 09 сентября 2011

Убедитесь, что ваша первая строка:

#!/bin/bash

Введите ваш путь к bash, если он не /bin/bash


Попробуйте запустить:

dos2unix script.sh

Преобразование концов строк и т. Д. Из Windows в формат Unix. то есть он обрезает \ r (CR) от концов строк, чтобы изменить их с \r\n (CR+LF) на \n (LF).

Подробнее о команде dos2unix (справочная страница)


Другой способ узнать, находится ли ваш файл в формате dos / Win:

cat scriptname.sh | sed 's/\r/<CR>/'

Вывод будет выглядеть примерно так:

#!/bin/sh<CR>
<CR>
echo Hello World<CR>
<CR>

Будет выведен весь текст файла с <CR>, отображаемым для каждого символа \r в файле.

53 голосов
/ 09 сентября 2011

Вы можете использовать bash -x scriptname.sh для отслеживания.

39 голосов
/ 03 июня 2015

Я тоже столкнулся с подобной проблемой.Кажется, проблема в разрешениях.Если вы сделаете ls -l, вы сможете определить, что в вашем файле НЕ может быть включен бит выполнения.Это НЕ позволит выполнить скрипт.:)

Как @artooro добавил в комментарии:

Чтобы решить эту проблему, запустите chmod +x testscript.sh

10 голосов
/ 09 сентября 2011

Если скрипт выполняет свою работу (относительно) хорошо, значит, он работает нормально.Ваша проблема, вероятно, в одной строке файла, ссылающейся на программу, которая либо не находится в пути, не установлена, не написана с ошибкой или чем-то подобным.

Один из способов - поместить set -x вверху вашего скриптаили запустите его с bash -x вместо bash - это выведет строки перед их выполнением, и вам обычно нужно просто посмотреть на вывод команды непосредственно перед ошибкой, чтобы увидеть причину проблемы

ЕслиКак вы говорите, это пустые строки, вызывающие проблемы, вы можете проверить, что на самом деле в их.Запустите:

od -xcb testscript.sh

и убедитесь, что нет «невидимых» забавных символов, таких как CTRL-M (возврат каретки), которые вы можете получить с помощью редактора Windows-типа.

8 голосов
/ 26 августа 2017

Это может быть тривиально и не связано с вопросом ОП, но я часто ошибался в начале, когда изучал скриптинг

VAR_NAME = $(hostname)
echo "the hostname is ${VAR_NAME}"  

Это даст ответ «команда не найдена».Правильный путь заключается в устранении пробелов

VAR_NAME=$(hostname)
7 голосов
/ 09 сентября 2011

используйте dos2unix в вашем файле скрипта.

6 голосов
/ 04 августа 2017

Если у вас есть Notepad ++ и вы получаете это .sh Сообщение об ошибке: "команда не найдена" или это сообщение об ошибке autoconf "строка 615: ../../autoconf/bin/autom4te: Нет такого файла или каталога ".

В блокноте ++ перейдите на Изменить -> EOL Conversion , затем установите флажок Macinthos (CR) . Это отредактирует ваши файлы. Я также рекомендую проверить все файлы с помощью этой команды, потому что скоро такая ошибка произойдет.

5 голосов
/ 30 июля 2016

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

/home/Manuel/mywrittenscript
5 голосов
/ 15 января 2016

Попробуйте chmod u+x testscript.sh

Я знаю это отсюда: http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/

3 голосов
/ 10 октября 2017

В Bash для Windows я неправильно попытался запустить

run_me.sh 

без ./ в начале и получил ту же ошибку.

Для людей с фоном Windows правильная форма выглядитизбыточный:

./run_me.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...