Я нахожусь в WSL (подсистема Windows для Linux) Я пытаюсь создать псевдоним для запуска vswhere.exe, который сообщит мне, где находится devenv.exe, а затем запустим его из моей оболочки ZSH.
path1 = "$ (vswhere.exe -property productPath -format value)"
echo $ path1
выводит: C: \ Program Files (x86) \ Microsoft Visual Studio \2017 \ Enterprise \ Common7 \ IDE \ devenv.exe
path2 = $ (wslpath -a "$ path1")
echo $ path2
выходные данные: / mnt / c/ Program Files (x86) / Microsoft Visual Studio / 2017 / Предприятие / Common7 / IDE / devenv.exe
$ path2 содержит именно то, что я хочу выполнить, за исключением того, что оно не заключено в кавычки.Если я возьму эту строку в консоли, скопирую, вставлю ее и заключу в кавычки вручную, VS выполнится правильно.
Примерно так: eval '/ mnt / c / Program \ Files \ (x86) / Microsoft \Visual \ Studio / 2017 / Enterprise / Common7 / IDE / devenv.exe '
выполняется: eval $ path2 завершается сбоем, поскольку в $ path2 есть пробелы.
Я пробовал это: path3= $ (printf% q $ path2 | sed -e 's / ^ M $ //')
echo $ path3
'mnt / c / Program \ Files \ (x86) /Microsoft \ Visual \ Studio / 2017 / Enterprise / Common7 / IDE / devenv.exe $ '
Содержит $ в конце строки.Попытка выполнить eval $ path3 завершается неудачно с:
zsh: нет такого файла или каталога: / mnt / c / Program Files (x86) / Microsoft Visual Studio / 2017 / Предприятие / Common7 / IDE / devenv.exe ^M
Обратите внимание на ^ M в конце.У меня закончились идеи по командам sed и тому подобному, чтобы сделать эту работу, и я уверен, что есть просто какая-то необычная команда regex или zsh / bash, чтобы сделать это правильно.