bash脚本进入Windows 10 Powershell版本

时间:2019-04-06 02:29:54

标签: bash powershell

我的Python2.7和pypy(使用virtualenv)都在Windows 10环境下。在模拟软件的README文件中,下面的Bash命令中包含一个“ for loop”脚本。如何将下面的“ for loop”(三行)Bash命令转换为等效的Windows 10 Powershell命令?

“最好并行运行多个进程,例如:

$ for i in {1..10}; do
$ time $pypy epto.py conf_epto/ $i > conf_epto/run-$i.log $
$ done
  • 然后获取所有运行的统计信息:

    $pypy genStats.py conf_epto 10

  • 这会将统计信息输出到stdout,并以gnuplot格式生成转储。”

我试图运行Powershell命令,但遇到错误:

(my-pypy-env) PS C:\Users\Acer\dev\pypy27home\my-pypy-env\SimpleDA-master> for ( $i = 1; $i -le 10; $i++) {
>> $pypy epto.py conf_epto/ $i > conf_epto/run-$i.log $
>> done}
At line:2 char:7
+ $pypy epto.py conf_epto/ $i > conf_epto/run-$i.log $
+       ~~~~~~~
Unexpected token 'epto.py' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

1 个答案:

答案 0 :(得分:0)

foreach ($i in 1..10) {
  Measure-Command { & $pypy epto.py conf_epto/ $i > conf_epto/run-$i.log } | Out-Host
}

& $pypy genStats.py conf_epto 10
  • foreach ($i in 1..10)遍历使用PowerShell的range operator (..)创建的数组1..10的元素;诸如foreach之类的复合语句的主体始终包含在PowerShell中的{ ... }中。

  • Measure-Command与PowerShell等效,内置于Bash的time;将要执行的要测量的命令作为脚本块({ ... })传递。

    • 除了Windows PowerShell >在默认情况下会创建“ Unicode”文件-UTF16-LE-文件(在PowerShell Core < / em>是没有BOM的UTF-8)。 >Out-File cmdlet的有效别名;使用不同的编码,将其传递给管道并使用-Encoding参数(例如,
      ... | Out-File -Encoding utf8 conf_epto/run-$i.log),尽管请注意,在Windows PowerShell中,-Encoding utf8总是创建一个UTF-8文件带有BOM

    • time将其结果直接输出到终端而不是标准输出; Out-Host也是如此;它会绕过PowerShell的标准输出success [output] stream

  • PowerShell要求使用&call operator)执行名称或路径指定为变量$pypy的命令;此要求源于PowerShell具有两个不同的parsing modes