最近のWindowsには,Windows PowerShellというシェルが用意されています。
従来のコマンドプロンプトよりも高機能なスクリプト言語を備えていたり,セキュリティポリシーが扱いやすいなど,どちらかといえば大組織のネットワーク管理者が喜びそうな機能を多数備えています。
その他の開発者などにとっては,あまり乗り換えるメリットは無いように感じられますが,「新しいものは良いものだ」という直感的な考えから,使っている人も多いのではないかと思います。
しかし,従来のコマンドプロンプトと大きく異なる点があり,まったく同じようには使えません。
ここでは,自分がハマったポイントを書いておこうと思います。
標準出力のエンコーディング
なぜか,標準出力が強制的にUTF-16LEになります。
たとえば,次のようなスクリプトを書いても,出力はUTF-16LEになります。
str = "日本語のサンプル" # 出力をファイルにリダイレクトするとUTF-16LEになる puts str.encode(Encoding::UTF_8)
これを避けるには,標準入出力を使わないようにし,直接ファイルに書き込むしかありません。
変換が噛んでいるからかもしれませんが,出力処理もcmd.exe
より遅くなります。
標準入出力を使う場合は,従来のコマンドプロンプトやCygwinなどを使った方がよさそうです。
標準入力のリダイレクト
標準出力のリダイレクトはできるのですが,標準入力のリダイレクトができません。
ruby -e 'print $stdin.readlines.size' < sample.txt
<
は将来の拡張のため予約語にされており,使用することができません。
そのため,ファイルの内容を標準出力に書き出すプログラムを使って,パイプを介して流し込むしかありません。
- 投稿タグ
- Windows, コンピューター, トラブルシューティング