Каждый раз, когда я запускаю скрипт bash scriptname.sh
из командной строки в Debian, я получаю, Command Not found
а затем результат скрипта.
Сценарий работает, но Command Not Found
для каждой пустой строки на экране всегда печатается инструкция. Каждая пустая строка означает, что команда не найдена.
Запускаю скрипт из /var
папки.
Вот сценарий:
#!/bin/bash
echo Hello World
Я запускаю его, набирая следующее:
bash testscript.sh
Почему это произошло?
bash -x scriptname.sh
для отслеживания ошибки. - В моем случае это был sh-файл, сохраненный под Windows с VSCode и окончанием строки как «CRLF». В VSCode в правом нижнем углу вы можете изменить терминатор строки с «CRLF» на «LF». Загрузил этот файл и, наконец, смог выполнить его с помощьюbash scriptname.sh
.Ответы:
Убедитесь, что ваша первая строка:
Введите свой путь к bash, если это не так
/bin/bash
Попробуйте запустить:
Это приведет к преобразованию окончаний строк и т. Д. Из Windows в формат unix. т.е. он удаляет \ r (CR) из концов строк, чтобы изменить их с
\r\n (CR+LF)
на\n (LF)
.Подробнее о
dos2unix
команде (справочная страница)Другой способ узнать, находится ли ваш файл в формате dos / Win:
Результат будет выглядеть примерно так:
Будет
<CR>
выведен весь текст файла с отображением для каждого\r
символа в файле.источник
bash scriptname.sh
(но, конечно, это все еще хорошая практика).Вы можете использовать его
bash -x scriptname.sh
для отслеживания.источник
Я тоже столкнулся с подобной проблемой. Проблема, похоже, связана с разрешениями. Если вы сделаете это
ls -l
, вы сможете определить, что в вашем файле НЕ включен бит выполнения. Это НЕ позволит выполнить скрипт. :)Как добавил @artooro в комментарии:
источник
chmod +x testscript.sh
Это может быть тривиально и не связано с вопросом OP, но я часто ошибался в начале, когда изучал скрипты.
Это приведет к ответу «команда не найдена». Правильный способ - устранить пробелы
источник
Если сценарий выполняет свою работу (относительно) хорошо, значит, он работает нормально. Вероятно, ваша проблема заключается в одной строке в файле, ссылающейся на программу, которая либо не указана в пути, либо не установлена, либо написана с ошибкой или что-то подобное.
Один из способов - поместить
set -x
вверху вашего скрипта или запустить егоbash -x
вместо простоbash
- это выведет строки перед их выполнением, и вам обычно просто нужно посмотреть на вывод команды непосредственно перед ошибкой, чтобы увидеть, что вызывает проблему.Если, как вы говорите, проблемы вызывают пустые строки, вы можете проверить, что на самом деле в них содержится . Бегать:
и убедитесь, что нет «невидимых» забавных символов, таких как
CTRL-M
(возврат каретки), которые вы можете получить с помощью редактора типа Windows.источник
В Bash для Windows я неправильно пытался запустить
без ./ в начале и получил ту же ошибку.
Для людей с фоном Windows правильная форма выглядит излишней:
источник
используйте
dos2unix
в своем файле сценария.источник
Пытаться
chmod u+x testscript.sh
Я знаю это отсюда: http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/
источник
для выполнения этого вы должны указать полный путь, например,
источник
Если у вас есть Notepad ++, и вы получаете это сообщение об ошибке .sh: «команда не найдена» или это сообщение об ошибке autoconf, строка 615: ../../autoconf/bin/autom4te: Нет такого файла или каталога » .
На вашем Notepad ++ перейдите в Edit -> EOL Conversion, затем отметьте Macinthos (CR) . Это отредактирует ваши файлы. Я также рекомендую проверять все файлы с помощью этой команды, потому что скоро возникнет такая ошибка.
источник
Была такая же проблема. К сожалению
поэтому я сделал это, чтобы преобразовать.
а потом
источник
Проблемы с запуском скриптов также могут быть связаны с неправильным форматированием многострочных команд, например, если у вас есть пробельный символ после разрыва строки "\". Например, это:
(обратите внимание, что лишний пробел после "\") вызовет проблемы, но когда вы удалите это пространство, он будет работать нормально.
источник
У меня также были некоторые из файлов
Cannot execute command
. Все выглядело правильно, но на самом деле у меня было неразрывное пространство
прямо перед моей командой, которое, конечно, было невозможно обнаружить невооруженным глазом:Что в Vim выглядело так:
Только после запуска программы проверки сценариев Bash
shellcheck
я обнаружил проблему.источник
shellcheck
доступен в режиме онлайн, хотя вам, конечно, нужно скопировать + вставить ваш скрипт именно для того, чтобы это помогло. shellcheck.netЯ столкнулся с этим сегодня, рассеянно копируя командную строку доллара
$
(перед командной строкой) в сценарий.источник
Добавьте текущий каталог (.) В PATH, чтобы иметь возможность выполнить сценарий, просто введя его имя, которое находится в текущем каталоге:
источник
.
В ПУТЬ.Вы можете обновить файлы .bashrc и .bash_profile псевдонимами, чтобы распознавать вводимую вами команду.
Файлы .bashrc и .bash_profile - это скрытые файлы, которые, вероятно, находятся на вашем диске C :, где вы сохраняете свои программные файлы.
источник