web-dev-qa-db-ja.com

WindowsコマンドラインでWSLを介してLinuxコマンドを呼び出す方法は?

Windows10のコマンドラインからlsや他の多くのLinuxツールを使用したいと思います。GnuWin32やその他のバイナリ置換があることは知っていますが、Linux用のWindowsサブシステムほどエレガントに機能するものはありません。 (WSL);更新メカニズムを含みます。

WSLを使用すると、コマンドラインからls ...を介してbash -c "ls ..."を呼び出すことができます。これは非常に効果的です。ただし、理想的には、コマンドラインでlsと入力するだけです。基本的にls.batを実行する@bash -c "ls %*"を作成できますが、エクスポートするすべてのコマンドに対してそれを実行する必要があります。 ls(および他の多くの)をコマンドラインにエクスポートするより直接的な方法はありますか?

12
bers

どうやらこれは WSLで最も要求された機能 であり、Microsoftは現在この機能をサポートしています。コマンドプロンプト(またはPowerShell)内からLinuxコマンドを使用するには、コマンドの前にwslを付けるだけです。したがって、たとえば、CMDからlsを実行する方法は次のとおりです。

C:\temp> wsl ls
<- contents of C:\temp ->

または、パッケージリストを更新する方法は次のとおりです。

C:\temp> wsl Sudo apt-get update
[Sudo] password for username:
Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]

詳細については、 公式ドキュメント をご覧ください。どんな種類の接頭辞も含まない解決策を探しているかどうかはわかりません。もしそうなら、私はまだ解決策を知りません。

17
nikhilweee

マイクロソフトは、あなたが求めているものを直接サポートしていませんが...

  • Doskey.exeを使用して " コンソールエイリアス "を作成できますが、これらのコンソールエイリアスは永続的ではありません(新しいコマンドプロンプトウィンドウを開くと、すべて消えています)。
  • _CMD /?_は、次の2つのレジストリキーを通知します:_HKey_Local_Machine\Software\Microsoft\Command Processor\AutoRun_と_HKey_Current_User\Software\Microsoft\Command Processor\AutoRun_、(_/D_オプションが指定されていない限り)両方の内容がチェックされます新しいコマンドプロンプトウィンドウが開いたときに(この順序で)実行します。

これら2つをFORループと、ユーザーフォルダー内の簡単にカスタマイズできる素敵なファイルと組み合わせると、私が望むものにかなり近いものを得ることができます。
これをHKLMに入れ、exportlinuxcommandsという名前の_%USERPROFILE%_のファイルを参照して、すべてのユーザーが利用できるようにしますが、ユーザーごとに簡単にカスタマイズできます。基本であり、それを設定したユーザーに対してのみ機能します。 1人のユーザーのみに使用する場合、またはユーザーごとにカスタマイズできないようにする場合は、手順を少し変更する必要があります。

  1. レジストリエディタを開く
  2. _HKey_Local_Machine\Software\Microsoft\Command Processor_に移動します
  3. ウィンドウの空の部分を右クリックして、[新規]> [文字列値](または[拡張可能な文字列値]]を選択しますが、コマンドプロセッサが読み取り後に展開することに気付いた場合、展開は少し無意味に見えます。とにかく値。)
  4. 「AutoRun」という名前を付けます(引用符なし)
  5. 作成した新しい値をダブルクリックします
  6. 「値データ」としてIF EXIST %USERPROFILE%\exportlinuxcommands FOR /F %i in (%USERPROFILE%\exportlinuxcommands) DO @doskey %i=bash -c "%i $*"を入力します。

ここで、_%USERPROFILE%_フォルダー(つまり、_C:\Users\YourUserName_)にexportlinuxcommandsというファイルを作成する必要があります。各Linuxコマンドでは、エイリアスを別々の行に配置します。例えば:

_ls
rm
cat
_

1つを削除したいですか?ファイルから削除すると、次に開いたコマンドプロンプトウィンドウには表示されません。
後でもう1つ追加しますか?それをファイルの独自の行に追加するだけで、次にコマンドプロンプトウィンドウを開いたときにそこに表示されます。

5
3D1T0R

使用してみてください windowsBash

Windows Bash内で次のコマンドを実行して、コマンドのショートカットを生成します

wget https://raw.githubusercontent.com/aleppos/windowsBash/master/windowsBash -P /usr/bin && chmod 0777 /usr/bin/windowsBash && windowsBash

次に、次のディレクトリをWindows * C:\ windowsBashのパスに追加します。

コマンドリストを更新したい場合は、シェルファイルを再度実行してください。

windowsBash

1
Emad Hajjar