WSLでWindows側とLinux側のパイプの使い分けについて


はじめに

WSLを使うと、コマンドウィンドウからLinuxのコマンドが簡単に使えて大変便利です。昔はちょっとしたコマンドを使うのにmsysなどの環境をインストールしていましたが、今どきはWSLだけで事足ります。しかし、WSL環境ならではのパイプの扱いに慣れていないと、期待する結果が得られません。しばらく使っていないとすぐに忘れてしまうので、ワンライナー的なメモにして残すことにしました。

要点

  • Windows側のパイプを使う場合は、普通に書けば大丈夫です。
    type a.txt | wsl cat | findstr "."
  • Linux側のパイプを使う場合は^でエスケープします。
    type a.txt | wsl cat ^| awk '1' ^| python -c "import sys; sys.stdout.write(sys.stdin.read())"
  • 上記をWindowsのパイプで処理させる場合:
    type a.txt | wsl cat | wsl awk '1' | wsl python -c "import sys; sys.stdout.write(sys.stdin.read())"

注意点

  • WSL(Linux側)で処理された結果は、Linux側のコード体系になります。WSLのデフォルトはUTF-8なので注意してください。
  • findstr "."は空行を削除するので、catの代用にはなりません。

おわりに

これが初めての投稿です。至らない点があればご指摘をお願いします。