\r В конце имени файла, ошибка. Как исправить php\r, bash\r, *.sh\r (/usr/bin/env: 'php\r': No such file or directory )
Primary tabs
Проблема
/usr/bin/env: 'php\r': No such file or directory
проблема наблюдалась при запуске команд терминала для симфони в windows 10 (сам проект запущен в контейнере linux, но git делал выгрузку в винду, что приводит по-умолчанию к конвертации символа окончания строки).
Проблема связана с разными переносами строк в разных ОС, и тем как Git работает с этими различиями.
Быстрая правка: Починка конкретного скрипта
В нашем случае алгоритм простой для решения проблемы на виндоус в случае, если мы хотим запустить конкретный файл в линукс-окружении -просто переформатировать его окончания строк в юникс-стиль, для этого запускаем power shell и выполняем 2 команды
$path = "C:\путь\к\файлу" (Get-Content $path -Raw).Replace("`r`n","`n") | Set-Content $path -Force
Решение: Отказ от конвертации окончаний строк на локальной машине (в windows)
Тут делаем два действия:
- Настраиваем ваш текстовый редактор (или IDE) для отображения переноса по \n (в лиункс-стиле)
- И для гита выполняем:
git config --global core.autocrlf false
-- таким образом мы говорим гиту не конвертировать окончания строк в виндос-стиль.
далее можно поправить имеющийся файл (если проблема в одному файле) способом описанным выше (power shell) или заново выкачать репозиторий (также можно проверить более быстрый вариант с git checkout . -- но я его не проверял, вообще любой способ заново вытащить все файлы без конвертирования окончаний строк).
Минусы этого способа в том, что надо работать с локальной машиной, что-то в ней перенастраивать, что не очень удобно в большой команде.
По-идее следующий ниже вариант более удобен.
Решение: Запрет конвертации без явной перенастройки локальных машин
Вы можете указать какое окончания использовать для специфических файлов при выгрузке в локальную файловую систему, для это в корень проекта можно положить файл .gitattributes с содержимым вроде:
# Конкретный файл без расширения bin/console eol=lf # все bash скрипты по расширению *.sh eol=lf
-- тут мы сначала указываем на конктреный файл баш стрипта, так как он нам нужен в неотконвертированном виде в любой системе (в данном случае это скрипт console из bin), а потом инструкцией:
*.sh eol=lf
запрещаем конвертировать окончания строк во всех баш-скрипнтах с расширением .sh
Если у вас уже наблюдается ошибка то, тут можно как и в описаниях выше, любым способом вытащить из индекса гит-а ещё раз состояние, но теперь уже с учетом новых правил конвертации из .gitattributes
Источники:
- Docker on Windows: /usr/bin/env: bash\r No such file or directory: https://pauledenburg.com/docker-on-windo...
- git Переносы строк (разных) -- как игнорировать/конвертировать в разных ОС (Windows/Linux -- core.autocrlf commit checkout) http://fkn.ktu10.com/?q=node/9352
- Replace CRLF using powershell https://stackoverflow.com/questions/1912...
- git Переносы строк (разных) -- как игнорировать/конвертировать в разных ОС : http://fkn.ktu10.com/?q=node/9352
- .gitattributes https://git-scm.com/docs/gitattributes
- Log in to post comments
- 7094 reads