Я новичок в использовании Cygwin, поэтому извиняюсь, если это очень новый вопрос.
У меня есть сценарий Bash, где я "CD" в каталог, а затем сделать что-то в этом каталоге. Тем не менее команда cd завершается ошибкой с «Нет такого файла или каталога / c / code / blah / blah».
Если я скопирую строку cd прямо в командную строку, то она будет работать нормально. Это просто не удается в сценарии.
[edit] В соответствии с просьбой, я добавил фактические строки из скрипта:
#!/bin/bash
cd /c/Code/Project
Спасибо за любую помощь с этим,
Дэн.
Ответы:
Какие типы окончаний строк есть в вашем сценарии? Для правильной работы bash-скрипта Cygwin (без необходимости установки специальных опций) он должен иметь окончания строки Unix (LF), а не окончания строки DOS (CR-LF). Если вы сохранили скрипт с окончанием строки DOS, bash увидит ваш аргумент
cd
as/c/Code/Project^M
, где^M
CR, и не найдет каталог с таким именем.Чтобы увидеть, какие у него окончания концов , вы можете выполнить
file scriptname
, где scriptname - это имя вашего скрипта. Чтобы преобразовать скрипт, чтобы он имел окончания строки Unix, выполнитеd2u scriptname
.Не используйте Блокнот для редактирования скриптов Cygwin Bash. Он всегда сохраняет файлы с окончанием строки DOS.
источник
:help ff
и:help ffs
.Если вы не переопределите, скрипт выполняется в своей собственной копии оболочки (обычно Bash). Затем, когда скрипт завершается, этот экземпляр bash также завершается. Таким образом, ваш сценарий компакт-дисков в новый каталог, а затем завершается, возвращая вас к исходному Bash - который никогда не делал CD.
Два способа обойти это. Вы можете использовать псевдоним вместо скрипта, например, в вашем .profile
Другой способ - сказать Bash не создавать подоболочку, используя синтаксис "точка"
источник
Вы можете найти ваши файлы в / cygdrive / c ...
источник
Пытаться:
cd /cygdrive/c/code/blah/blah
источник
'cd c:/code/blah/blah
«не для'cd /c/code/blah/blah
». Кроме того,c:
форма ' ' также работает из скрипта; Здесь чего-то еще не хватает, вопрос требует большей проработки.У меня нет репутации, чтобы комментировать или голосовать, но ответ CarlF помог мне.
«Таким образом, ваши скриптовые CD попадают в новый каталог, а затем завершаются, возвращая вас к исходному Bash, который никогда не создавал CD».
Тот же скрипт, но в моем случае сообщения об ошибке нет.
Это сработало для меня:
, myscript.sh
источник