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