在Windows中等效的Shell脚本

时间:2018-03-02 12:33:47

标签: windows powershell windows-10 sh

我需要将一些.sh shell脚本转换为可以在Windows环境中运行的Windows本机脚本,而无需使用任何外部软件,如cygwin,migwin等。

我知道Windows 10有适用于Linux的Windows子系统(WSL),但它处于测试版状态并且使用它我们需要启用开发人员模式。

我的一些选项是将它们转换为批处理文件或Powershell脚本,但是我需要找到每个等效的CMD / PS命令​​,这需要很长时间。

在Windows上运行shell脚本有什么快捷方式吗?

2 个答案:

答案 0 :(得分:2)

您唯一的选择是:

  1. WSL,正如您所指出的那样 - 但它已不再处于测试阶段。

  2. 安装类似CygWin的内容。

  3. 将* ix shell脚本转换为批处理,PowerShell,VBScript或JScript。如果您使用PowerShell,在寻找等价物方面可能会有更好的运气。是的,这需要一些时间和研究,但任何类型的脚本翻译的成本将是一个学习曲线;即使有自动化工具,结果也会非常不理想。 PowerShell采用与其他shell明显不同的模型,与管道相关;如果你试图写入传统模型而不是按照预期使用PowerShell,你会发现你的挫折程度一直存在。

  4. 通过最严格的定义,您的选择" Windows本机脚本"是上面的选项3;其他人不是" Windows原生脚本&#34 ;;他们实现了非Windows工具,允许您针对Windows资源运行* ix shell脚本(通常是bash,而不是sh,csh,zsh等)。

答案 1 :(得分:0)

我建议使用适用于Linux的Windows子系统,因为它已经普遍可用且不再处于测试阶段。

您可以通过PowerShell安装它:

bash.exe myscript.sh

安装完成后,您可以交互式执行脚本或通过bash传递,例如:

[Files]
Source: "C:\...\Service.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\...\log4net.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:...\Service.exe.config"; DestDir: "{app}"; Flags: ignoreversion

[Run]
Filename: {sys}\sc.exe; \
    Parameters: "create Service start= auto binPath= ""{app}\Service.exe"""; \
    Flags: runhidden

[UninstallRun]
Filename: {sys}\sc.exe; Parameters: "stop Service"; Flags: runhidden
Filename: {sys}\sc.exe; Parameters: "delete Service"; Flags: runhidden

更多信息:https://docs.microsoft.com/en-us/windows/wsl/install-win10