Был задан аналогичный вопрос, но неудовлетворительно. отвечать. Я установил kaldi на WSL и при запуске скрипта получаю эту ошибку, которая явно связана с «Program Files».
sh: 1: export: Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222.0_x64__79rhkp1fndgsc:/mnt/c/ProgramData/Oracle/Java/javapath:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program: bad variable name
Один из ответов заключался в том, чтобы сделать ссылку «Программа» на «Программные файлы». Но это не удается: / mnt / c $ sudo ln -s / mnt / c / "Program Files" Program ln: не удалось создать символическую ссылку "Program" Создание ссылка на стороне окна работает успешно, но не действует.
У меня есть подозрение, что это вызвано чем-то в вашем скрипте или файлах запуска (при условии ~ / .bashrc
или ~ / .profile
) некорректно цитирует переменную PATH
. Поскольку WSL автоматически добавляет путь Windows к пути WSL, он добавляет некоторые элементы пути с «Program Files», что является правильным.
Но это требует правильного заключения переменных в кавычки. Проверьте свой скрипт на использование $ PATH
и процитируйте его (или добавьте потенциально оскорбительные строки в свой вопрос, если вам нужна помощь с этим). Если вы не видите ничего подозрительного в сценарии, проверьте также свои ~ / .bashrc
и ~ / .profile
.
Редактировать / обновить : я почти уверен, что оскорбительная строка будет в скрипте, который обрабатывается через тире
(то есть sh
). Bash прекрасно справляется с этим без дополнительных кавычек:
> export PATH=$PATH:newpath
> echo $?
0
> echo $PATH
> # outputs correct PATH, even with spaces in the Windows path
Однако запустите sh
и попробуйте то же самое:
$ export PATH=$PATH:newpath
sh: 1: export: Files/NVIDIA: bad variable name
$ export PATH="$PATH":newpath
$ echo $?
0
$ echo $PATH
# outputs correct PATH, even with spaces in the Windows path
Также существует «бандажное» решение для отключения функции WSL, которая добавляет путь Windows к Путь к WSL / Linux. Вы можете сделать это, создав (или отредактировав, если он уже существует) /etc/wsl.conf
и добавив следующие строки:
[interop]
appendWindowsPath=false
Затем остановите экземпляр с помощью wsl --terminate Ubuntu
(предполагая имя дистрибутива по умолчанию) и перезапустите WSL.
Это не хорошее постоянное решение, IMHO, так как это значительно усложняет запуск приложений Windows (таких как VSCode), когда они не находятся на пути.
Лучше выяснить основную проблему и исправить ее с помощью скриптов.
Я нашел ответ в https://arstechnica.com/civis/viewtopic.php?f=16&t=1472885 Вам нужно удалить пути к окнам из $ PATH, и вы делаете это, создавая /etc/wsl.conf со следующим текстом: [interop] appendWindowsPath = False Затем закройте окно WSL , подождите 8 секунд и перезапустите.