ошибка неверного имени переменной в WSL

Был задан аналогичный вопрос, но неудовлетворительно. отвечать. Я установил 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" Создание ссылка на стороне окна работает успешно, но не действует.

0
задан 30 July 2021 в 17:03

2 ответа

У меня есть подозрение, что это вызвано чем-то в вашем скрипте или файлах запуска (при условии ~ / .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), когда они не находятся на пути.

Лучше выяснить основную проблему и исправить ее с помощью скриптов.

1
ответ дан 20 August 2021 в 10:30

Я нашел ответ в https://arstechnica.com/civis/viewtopic.php?f=16&t=1472885 Вам нужно удалить пути к окнам из $ PATH, и вы делаете это, создавая /etc/wsl.conf со следующим текстом: [interop] appendWindowsPath = False Затем закройте окно WSL , подождите 8 секунд и перезапустите.

-1
ответ дан 20 August 2021 в 10:30

Другие вопросы по тегам:

Похожие вопросы: