Как запустить скрипт bash в текущем каталоге из cmd-файла с помощью Cygwin?

Как запустить скрипт bash в текущем каталоге из cmd-файла с помощью Cygwin?

Это не работает - мой файл script.cmd содержит: /questions/11265253/cygwin-zapustit-skript-bez-vyivoda-soobschenij-iz-komandyi-zapuska/11265264#11265264

c:\cygwin64\bin\bash -l -c '%CD%/my_script.sh'

Выход

E:\mydir>c:\cygwin64\bin\bash -l -c 'E:\mydir/my_script.sh'
/usr/bin/bash: E:mydir/my_script.sh: No such file or directory

Ответ:

Я могу успешно использовать такие команды:

  • c:\cygwin64\bin\bash -l -c "cd %CD:\=/%/; %CD:\=/%/my_script.sh"
  • c:\cygwin64\bin\bash -l -c "cd %CD:\=/%/; echo $PWD"

2 ответа

Решение

В возвращенном сообщении об ошибке вы указали обратную косую черту между E: а также mydir исчез, что позволяет мне предположить, bash использует такие как escape-символы.

Командная строка Windows (cmd) однако использует обратную косую черту в качестве разделителей пути, следовательно %CD% содержит такое. Тем не мение, bash ожидает косую черту в качестве разделителей пути.

Поэтому, чтобы заменить все обратные косые черты на прямые, используйте подстроку подстановки, например так:

c:\cygwin64\bin\bash -l -c '%CD:\=/%/my_script.sh'

Если одиночные кавычки также вызывают проблемы, используйте двойные кавычки:

c:\cygwin64\bin\bash -l -c "%CD:\=/%/my_script.sh"

Решение в два этапа, сначала преобразовать%CD% с cygpathзатем позвоните bash с преобразованным путем в формате POSIX

FOR /F %%I IN ('c:\cygwin64\bin\cygpath -c -u %CD%') DO SET CDU=%%I
c:\cygwin64\bin\bash -l -c %CDU%/my_script.sh
Другие вопросы по тегам