PSS*_*Sim 9 bash windows-10 windows-subsystem-for-linux windows-10-v1607
如何将所有.sh文件关联到 Windows 10 周年更新中包含的新 BASH?
我曾尝试.sh使用默认系统提示关联文件,C:\Windows\System32\bash.exe但它只是闪烁控制台窗口而没有结果。
小智 5
也可以只使用批处理文件:
@echo off
REM Get the full qualified path for the first argument
SET fullpath=%~f1
REM Get the drive letter and convert it to lowercase
SET drive=%fullpath:~0,1%
FOR %%i IN ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i" "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r" "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z") DO CALL SET drive=%%drive:%%~i%%
REM Replace \ with /
SET relpath=%fullpath:~3%
SET relpath=%relpath:\=/%
C:\Windows\System32\bash.exe --login "/mnt/%drive%/%relpath%"
Run Code Online (Sandbox Code Playgroud)
现在只需使用Open with...(并记得选中Always use this app to open .sh files)将 sh 文件与此批处理文件相关联。
编辑:包含--loginbash.exe 的参数以设置所有适当的 linux 特定环境变量(例如$PATH)
问题是 BASH 使用类似 Unix 的路径,而 Windows 提供 DOS 路径。所以你需要将 DOS 路径重定向到 Unix 路径。
我的解决方案
它更像是黑客而不是真正的解决方案。使用风险由您自行承担
编写小型 C# 控制台应用程序来重定向路径
string[] splt = args[0].Split(':');
string exe = Environment.GetFolderPath(Environment.SpecialFolder.System) + "\\bash.exe";
string arguments = "/mnt/" + splt[0].ToLower() + splt[1].Replace('\\', '/');
using (Process process = new Process())
{
process.StartInfo.FileName = exe;
process.StartInfo.Arguments = arguments;
process.Start();
process.WaitForExit();
return process.ExitCode;
}
Run Code Online (Sandbox Code Playgroud)
然后将.sh文件与此 C# 应用程序关联
肮脏但有效
| 归档时间: |
|
| 查看次数: |
4628 次 |
| 最近记录: |