linux - скрипты - bash скрипт создать файл



Сценарий Bash всегда печатает «Команда не найдена» (10)

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

run_me.sh 

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

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

./run_me.sh

https://src-bin.com

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

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

Вот сценарий:

#!/bin/bash

echo Hello World

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

bash testscript.sh

ОБНОВЛЕНИЕ - проблема возникает в пустых строках. Каждая пустая строка приводит к тому, что команда не найдена. Почему это происходит?


Answer #1

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


Answer #2

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

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

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

od -xcb testscript.sh

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


Answer #3

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

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



Answer #5

Проблемы с запущенными скриптами также могут быть связаны с плохим форматированием многострочных команд, например, если у вас есть пробельный символ после разрыва строки «\». Например:

./run_me.sh \ 
--with-some parameter

(обратите внимание, что дополнительное пространство после «\») вызовет проблемы, но когда вы удалите это пространство, он будет работать отлично.


Answer #6

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

#!/bin/bash

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

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

dos2unix script.sh

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

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

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

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

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

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

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


Answer #7

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

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

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

VAR_NAME=$(hostname)

Answer #8

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

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

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


Answer #9

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

/home/Manuel/mywrittenscript




debian