12

Я новичок в использовании Cygwin, поэтому извиняюсь, если это очень новый вопрос.

У меня есть сценарий Bash, где я "CD" в каталог, а затем сделать что-то в этом каталоге. Тем не менее команда cd завершается с ошибкой «Нет такого файла или каталога /c /code /blah /blah».

Если я скопирую строку cd непосредственно в командную строку, то она будет работать нормально. Это просто не удается в сценарии.

[edit] По запросу я добавил фактические строки из скрипта:

#!/bin/bash
cd /c/Code/Project

Спасибо за любую помощь с этим,
Дан.

5 ответов5

18

Какие типы окончаний строк есть в вашем сценарии? Для корректной работы bash-скрипта Cygwin (без необходимости установки специальных опций) он должен иметь окончания строк Unix (LF), а не окончания строк DOS (CR-LF). Если вы сохранили сценарий с окончанием строки DOS, bash увидит ваш аргумент для cd как /c/Code/Project^M , где ^M - это CR, и не найдет каталог с таким именем.

Чтобы увидеть, какой вид окончания строки у него есть, вы можете выполнить file scriptname , где scriptname - это имя вашего скрипта. Чтобы преобразовать скрипт так, чтобы он имел окончания строк Unix, выполните d2u scriptname .

Не используйте Блокнот для редактирования скриптов Cygwin Bash. Он всегда сохраняет файлы с окончанием строки DOS.

2

Вы можете найти ваши файлы в /cygdrive /c ...

2

Если вы не переопределите, скрипт выполняется в своей собственной копии оболочки (обычно Bash). Затем, когда скрипт завершает работу, этот экземпляр bash также завершается. Таким образом, ваш сценарий компакт-дисков в новый каталог, а затем завершает работу, возвращая вас к исходному Bash - который никогда не делал CD.

Два способа обойти это. Вы можете использовать псевдоним вместо скрипта, например, в вашем .profile

alias mycd="cd /c/Code/Project"

Другой способ - сказать Bash не создавать подоболочку, используя синтаксис "точка".

. myscript
1

У меня нет репутации, чтобы комментировать или голосовать, но ответ CarlF помог мне.

«Таким образом, ваши скрипты CD попадают в новый каталог, а затем завершаются, возвращая вас к исходному Bash - который никогда не создавал CD».

Тот же сценарий, но в моем случае сообщения об ошибке нет.

Это сработало для меня:

, myscript.sh

1

Пытаться:

cd /cygdrive/c/code/blah/blah

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .