在WSL中执行脚本时如何调用cmd运行指定单条命令?
WSL内调用CMD命令执行构建的方案
WSL原生支持调用Windows系统下的可执行文件,你不需要手动切换运行环境,只要将原脚本中需要在CMD下运行的command2用cmd.exe /c包裹即可,执行完成后会自动回到WSL上下文继续执行后续命令。
修改后的脚本示例:
command1 && cmd.exe /c "command2" && command3
注意事项
- 正常情况下WSL会自动继承Windows的系统路径,可直接调用
cmd.exe,如果提示找不到命令,可写全路径调用:/mnt/c/Windows/system32/cmd.exe cmd.exe会透传内部命令的退出码,原有脚本的&&串联逻辑完全不受影响,只有command2执行成功才会继续执行后续的command3- 如果
command2中涉及路径参数,需要先将WSL侧的Linux路径转换为Windows格式的路径,使用wslpath -w命令即可完成转换,示例:# 示例:在CMD中列出WSL /home/user/build目录下的文件 win_build_path=$(wslpath -w /home/user/build) command1 && cmd.exe /c "dir $win_build_path" && command3 - 如果需要执行多条CMD命令,可将多条命令放在同一对引号内,用CMD的命令分隔符
&或者&&拼接即可:cmd.exe /c "cd C:\build & build.bat && echo build success" - 如果CMD命令中包含双引号,外层可以改用单引号包裹避免转义冲突:
cmd.exe /c 'echo "cmd 内部带双引号的输出"'
内容的提问来源于stack exchange,提问作者EnderShadow8
相关产品推荐
相关产品推荐

