我在用着此方法使用 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 命令的文件的引用)。