有人问过类似的问题,但没有令人满意的答案。我在 WSL 上安装了 kaldi,运行脚本时出现此错误,这显然与“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
其中一个答案是建立“Program”到“Program Files”的链接。但是,它失败了:/mnt/c$ sudo ln -s /mnt/c/“Program Files” Program ln: 无法创建符号链接“Program”在 Windows 端建立链接成功,但没有效果。
答案1
我猜这是由于脚本或启动文件(假设~/.bashrc
或~/.profile
)中的某些内容未正确引用PATH
变量造成的。由于 WSL 会自动将 Windows 路径附加到 WSL 路径,因此它会添加一些包含“Program Files”的路径元素,这是正确的。
但它确实需要正确的变量引用。检查脚本是否使用了$PATH
并引用它(或者,如果您需要帮助,请将可能引起问题的行添加到您的问题中)。如果您在脚本中没有发现任何可疑之处,那么还要检查您的~/.bashrc
和~/.profile
。
编辑/更新:我确信有问题的行位于正在处理的脚本中dash
(即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
还有一个“临时”解决方案可以禁用将 Windows 路径附加到 WSL/Linux 路径的 WSL 功能。您可以通过创建(或编辑(如果已存在))/etc/wsl.conf
并添加以下几行来执行此操作:
[interop]
appendWindowsPath=false
wsl --terminate Ubuntu
然后使用(假设默认发行版名称)停止实例,并重新启动 WSL。
这不是一个好的永久解决方案,恕我直言,因为当 Windows 应用程序(例如 VSCode)不在路径中时,它使运行它们变得更加困难。
最好找出核心问题并在脚本中修复它。
答案2
我找到了答案 https://arstechnica.com/civis/viewtopic.php?f=16&t=1472885 您需要从 $PATH 中删除 Windows 路径,然后通过创建带有以下文本的 /etc/wsl.conf 来执行此操作:[interop] appendWindowsPath=False 然后关闭 WSL 窗口,等待 8 秒,然后重新启动。
答案3
我可能有点迟了,但还是发了这篇文章,以防其他人偶然发现这个帖子。我在使用 Ubuntu 全新安装 WSL 时遇到了同样的问题,只需在 WSL 中运行以下命令(以 root 身份)即可解决:
$ sudo apt update && sudo apt upgrade -y
我所要做的就是重新启动我的 WSL 终端,问题就消失了。希望这对大家有帮助!