88997


少し前にこの[コード](https://raw.githubusercontent.com/rhysd/ghci-color/master/ghci-
color)を発見しましたが、ウィンドウズのPowerShell 5.1
を利用しているため、このコードを実行できませんでした。そこで、このコードの`.ps1`バージョンを作ることにして、 `sed` の代わりに
`-replace` 演算子使ったものがこちらになります。

[code]

    #!/usr/bin/env powershell
    
    Write-Output "$([char]0x1b)[91m ---$([char]0x1b)[1;35m ghci-colour$([char]0x1b)[91m cannot print infinite sequences ---$([char]0x1b)[0m"
    
    $GREEN = "$([char]0x1b)[92m"
    $RED = "$([char]0x1b)[91m"
    $CYAN = "$([char]0x1b)[96m"
    $BLUE = "$([char]0x1b)[94m" 
    $YELLOW = "$([char]0x1b)[93m" 
    $PURPLE = "$([char]0x1b)[95m" 
    $RESET = "$([char]0x1b)[0m"
    
    $load_failed = '^Failed, modules loaded:'
    $load_done = 'done'
    $double_colon = '::'
    $right_arrow = '\->'
    $right_arrow2 = '=>'
    $calc_operators = '[+-/*]'
    $char = "'\\?.'"
    $string = '"[^"]*"'
    $parenthesis = '[{}()]'
    $left_bracket = '\[(.*?)\]'
    $right_bracket = '\]'
    $no_instance = '^\s*No instance'
    $interactive = '^<[^>]*>'
    
    Invoke-Expression (Get-Command ghci).Path @args 2>&1 | `
        % {$_ `
            -replace $load_failed, "$RED`$0$RESET" `
            -replace $load_done, "$GREEN`$0$RESET" `
            -replace $double_colon, "$PURPLE`$0$RESET" `
            -replace $right_arrow, "$PURPLE`$0$RESET" `
            -replace $right_arrow2, "$PURPLE`$0$RESET" `
            -replace $calc_operators, "$PURPLE`$0$RESET" `
            -replace $char, "$RED`$0$RESET" `
            -replace $string, "$CYAN`$0$RESET" `
            -replace $parenthesis, "$BLUE`$0$RESET" `
            -replace $left_bracket, "$BLUE`[$RESET`$1]" `
            -replace $right_bracket, "$BLUE`$0$RESET" `
            -replace $no_instance, "$RED`$0$RESET" `
            -replace $interactive, "$RED`$0$RESET" `
        }
    
[/code]

下にある画像の通り、このコードの実行自体はできますが、`2>&1` を書いても何だか `stderr`
の部分は表示されてないです。どなたか、なんでそうなったか教えていただけると幸いです。

[![画像の説明をここに入力](https://i.stack.imgur.com/KE4mX.png)](https://i.stack.imgur.com/KE4mX.png)


CC BY-SA 4.0
2022-04-29T08:49:16.053
88566
2022-05-23T23:48:51.947
2022-05-22T09:54:51.920
44019
44019
question
powershell haskell
PowerShell5.1が実行できる彩りのGHCi出力


どうやら問題はここ：

[code]

    Invoke-Expression (Get-Command ghci).Path @args 2>&1 | `
        % {$_ `
    
[/code]

です。

もし`2>&1`を消したら以下の画像の通りに`stderr`の部分は表示されるようになると試してわかったんです。

[![画像の説明をここに入力](https://i.stack.imgur.com/jbisl.png)](https://i.stack.imgur.com/jbisl.png)

原因は恐らくghciとPowerShellの`stdout`は違うのです。


CC BY-SA 4.0
2022-05-23T09:31:11.120
88997
2022-05-23T23:48:51.947
2022-05-23T23:48:51.947
44019
44019
88566
answer