![解决通过 Windows 资源管理器在 WSL 2 上执行 .sh 文件时出现“权限被拒绝”的问题](https://linux22.com/image/1612650/%E8%A7%A3%E5%86%B3%E9%80%9A%E8%BF%87%20Windows%20%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86%E5%99%A8%E5%9C%A8%20WSL%202%20%E4%B8%8A%E6%89%A7%E8%A1%8C%20.sh%20%E6%96%87%E4%BB%B6%E6%97%B6%E5%87%BA%E7%8E%B0%E2%80%9C%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%E2%80%9D%E7%9A%84%E9%97%AE%E9%A2%98.png)
我在用着此方法使用 bash.exe 在 Windows 资源管理器中执行 .sh 文件:
"C:\Windows\System32\bash.exe" -c " \"./$(grep -oE '[^\\]+$' <<< '%L')\"; cd ~; bash;"
\\wsl$\Ubuntu\home\davidg\example.sh
对于我的 WSL2 Linux 发行版之外的文件,这可以正常工作,但是对于我得到的文件,例如Permission denied
。
我可以从 powershell 的bash.exe ./example.sh
工作目录运行它,并且执行起来没有问题。
为什么会发生这种情况?我该如何解决?
更新:pushd \\wsl$\Ubuntu
解决方法是从cmd.exe
Windows 资源管理器中的映射驱动器而不是 UNC 路径 运行并执行 .sh 文件。
答案1
这似乎有效,但我不完全确定为什么:
"C:\Windows\System32\bash.exe" -c "bash \"./$(grep -oE '[^\\]+$' <<< '%L')\"; cd ~; bash;"
据我所知,-c
由于存在一系列命令,因此必须使用 来调用对 bash 的外部调用。调用 .sh 文件得益于没有命令行选项的内部 bash 调用(即,根据手册页,仅传递对包含 shell 命令的文件的引用)。