Я создал скрипт bash, но когда я пытаюсь его выполнить, я получаю
#!/bin/bash no such file or directory
Мне нужно запустить команду: bash script.sh
чтобы она работала.
Как я могу это исправить?
bash
shell-script
executable
shebang
Николя де Фонтене
источник
источник
#!/usr/bin/env bash
вместо этого#!/bin/bash
и тоже ищет здесь ...Ответы:
Сообщение такого рода обычно происходит из-за фиктивной строки shebang, либо из-за дополнительного возврата каретки в конце первой строки, либо из спецификации в начале.
Бегать:
и посмотрим, чем это закончится.
Это не верно:
Это тоже неправильно:
Это верно:
Использование
dos2unix
(илиsed
,tr
,awk
,perl
,python
...) , чтобы исправить сценарий , если это вопрос.Вот тот, который удалит как спецификацию, так и хвостовые CR:
Обратите внимание, что оболочка, которую вы используете для запуска скрипта, немного повлияет на отображаемые сообщения об ошибках.
Вот три сценария, которые просто показывают их имя (
echo $0
) и имеют следующие соответствующие строки:correctScript:
scriptWithBom:
scriptWithCRLF:
Под bash их запуск покажет эти сообщения:
Запуск фиктивных вызовов путем явного вызова интерпретатора позволяет запускать скрипт CRLF без каких-либо проблем:
Вот поведение, наблюдаемое под
ksh
:и под
dash
:источник
hexdump -C yourscript | head -n 1
. Я все еще использовал бы,dos2unix yourscript
чтобы исправить это.#!/bin/bash no such file or directory
сообщение об ошибке, поскольку нет никаких причин, по которым что-либо пыталось бы выполнить или открыть#!/bin/bash
. Это/bin/bash<CR>
то, что будет выполнено.dos2unix
также удаляет спецификацию UTF-8. Спецификация UTF-8 могла бы объяснить сообщение об ошибке.Это также может быть вызвано спецификацией в сценарии UTF-8. Если вы создаете сценарий в Windows, иногда вы получаете немного мусора в начале файла.
источник
На самом деле, правильный сценарий для bash-скриптов таков:
Потому что в FreeBSD Bash находится в
/usr/local/bin/bash
источник
Вы можете использовать vi, чтобы исправить обе проблемы, если они существуют:
источник
Если у вас нет dos2unix, это способ исправить эту проблему.
источник
Порядок следования байтов (BOM)
Это может быть вызвано спецификацией. Из Википедии, спецификация
К сожалению, это ничего не сигнализирует ядру Linux, которое обрабатывает строку she-bang. Вы можете подтвердить, что у вас есть спецификация, используя
file
,Или вы можете зашифровать первые несколько символов и посмотреть, соответствуют ли они любому из символов спецификации вручную
Вы можете лишить персонажей спецификации, как только узнаете их,
источник
Я столкнулся с проблемой, случайно добавив неверный исполняемый файл bash к
PATH
и потому, что в моем скрипте#!/usr/bin/env bash
был использован более гибкий shebang (возьмите первый исполняемый файл bash по пути).Я установил GIT для Windows, чтобы работать
cygwin
вместе с Windows GIT GUI (не работал с родным git cygwin ...). Я решил это сейчас, переключившись на#!/bin/bash
sheband и удалив GIT для WindowsPATH
.источник
Пытаться
#!/bin/bash
Вторая вещь:
find / -name bash
третья вещь:
ls -al /bin/bash
источник
which bash
. Мы знаем, что он находит, потому что работает сbash script.sh
.