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

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

Не работает - мой файл script.cmd содержит: https://stackoverflow.com/a/17204645/1558037

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 ]

0 голосов
/ 06 февраля 2019

решение в два этапа, сначала преобразуйте% 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
0 голосов
/ 05 февраля 2019

В возвращенном сообщении об ошибке вы указали обратную косую черту между 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"
...