#author("2021-02-20T15:09:48+09:00","default:nobuoki","nobuoki")
#author("2021-02-20T15:13:52+09:00","default:nobuoki","nobuoki")
* はじめに [#x713d04b]

WSL導入済みの環境で、コマンドプロンプトからLinuxのコマンドを使うには、「wsl awk」のように、頭に「wsl」を付けます
WSL導入済みの環境で、コマンドプロンプトからLinuxのコマンドを使うには ''wsl awk'' のように、頭に ''wsl'' を付けます

- [[Windows 10のコマンドプロンプトからWSL上のLinuxコマンドを呼び出す(バージョン1803対応版):Tech TIPS - @IT>https://www.atmarkit.co.jp/ait/articles/1805/24/news022.html]]

とはいえコマンドを使うたびにいちいち頭に「wsl」を付けるのは手間なので、予めバッチファイルを作成し、例えば「awk」と打つだけで「wsl awk」にすると便利です
とはいえコマンドを使うたびにいちいち頭に ''wsl'' を付けるのは手間なので、予めバッチファイルを作成し、例えば ''awk'' と打つだけで ''wsl awk'' に変換すると便利です

このバッチファイルを一気に作成する方法をご紹介します

** WSLを導入していない(システム管理上の都合でWSLが入れられない)場合のおすすめ [#w1409401]

[[busybox-w32>https://frippery.org/busybox/]] がおすすめです
- [[インストール不要!WindowsでLinuxコマンドを使う - Qiita>https://qiita.com/tetsuy/items/22cba0bc2048967b270a]]

* 大まかな流れ [#g7ab02ae]

- Windows環境変数「PATH」の追加
- コマンドプロンプトで、「PATH」に追加したディレクトリを作成
- WSL側で、Linuxコマンドの数だけバッチファイルを作成

完成イメージ
#ref(./wsl-cmd-03.jpg,60%)


* Windows環境変数「PATH」の追加 [#qbb400e5]

※ 既存のPATHにバッチファイルを作成する人は読み飛ばしてください

スタート>設定>「システムの詳細設定」と検索し、「システムの詳細設定の表示」をクリック

#ref(./wsl-cmd-01.jpg,70%)

右奥から順に、
システムのプロパティ「環境変数(N)」
>環境変数「Path」を選択し「編集(E)」
>環境変数名の編集「新規(N)」を押し ''%userprofile%\bin'' を追加

#ref(./wsl-cmd-02.jpg,90%)


* コマンドプロンプトで、「PATH」に追加したディレクトリを作成 [#k92af628]
* コマンドプロンプトで ''PATH'' に追加したディレクトリを作成 [#k92af628]

- コマンドプロンプト(cmd.exe)を起動して以下のコマンドを打ち込みます
#pre{{{
mkdir %userprofile%\bin
cd %userprofile%\bin
}}}

* WSL側で、Linuxコマンドの数だけバッチファイルを作成 [#p2026ab4]

- コマンドプロンプト(cmd.exe)で以下のコマンドを打ち込み、WSLのbashを起動します
#pre{{{
wsl bash
}}}

- bash 上で以下のコマンドを打ち込み、Linuxコマンド起動用のバッチファイルを量産します
echo, find コマンドは衝突しないように、頭に「w」を付けて wecho, wfind に置き換えています(頭の w  は好きなように変えてください)
echo, find コマンドは衝突しないように、頭に ''w'' を付けて ''w''echo, ''w''find に置き換えています(頭の ''w''  は好きなように変えてください)
#pre{{{
find /bin/ /usr/bin/ -maxdepth 1 -perm -o+x | awk -F/ '{a[$NF]++}END{for(v in a)print "@wsl "v" %*">v".bat"}'
for c in echo find; do mv ${c}.bat w${c}.bat; done
exit
}}}

これでコマンドプロンプト環境で、頭に「wsl」を付けずに Linux コマンドを使うことが出来ます
これでコマンドプロンプト環境で、頭に ''wsl'' を付けずに Linux コマンドを使うことが出来ます


* Tips [#gb16510c]
- Linuxコマンドを起動するバッチファイルの雛形は ''@WSL コマンド名 %*'' です
-- 先頭の @ で、画面にコマンド行が表示されないようにしています
-- バッチファイル引数を %* によりLinuxコマンドに引き継ぎます
- windowsコマンドをLinuxコマンドにパイプするときは、nkf -w 等でUTF-8に変換する必要があるかもしれません

文字コード変換が必要な例
#ref(./wsl-cmd-04.jpg,75%)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS