2017-09-20 4 views
3

Windows 10のコマンドラインからlsと他の多くのLinuxツールを使いたいと思います.GnuWin32やその他のバイナリの置き換えがあることは知っていますが、WSL(Windows Subsystem for Linux) ;更新メカニズムを含む。WindowsのコマンドラインでWSLからLinuxコマンドを呼び出す方法は?

WSLでは、bash -c "ls ..."経由でコマンドラインからls ...を呼び出すことができます。これはうまくいきます。ただし、理想的には、コマンドラインに「ls」と入力するだけです。私は基本的に@bash -c "ls %*"を行うls.batを作成することができます - しかし、私はエクスポートしたいすべてのコマンドのためにそれをしなければならないでしょう。 ls(および他の多くのもの)をコマンドラインにエクスポートするより直接的な方法はありますか?

+1

WSLで使用可能なbashコマンドは、WSL以外での使用を目的としていません。それが実現されれば私は驚くだろう。 – ifconfig

+0

@ifconfigまあ、それは意図されていないか、実装されていません。私は、それぞれのWSLコマンドに1つのライナーエイリアス "多くの"よく知られているLinuxコマンドに満足しています。 – bers

答えて

1

これは明らかにmost requested feature for 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] 

詳細はofficial docsに記載されています。 接頭辞を使用しない解決策を探しているかどうかはわかりません。そのような場合は、私はまだ解決策を知らない。

+0

バイバイ、Cygwin! – bers

+0

'wsl ls ...'は確かに 'bash -c" ls ... "'よりもタイピング可能ですので、これは私の質問に答えます。 – bers

4

Microsoftが直接あなたがdoskey.exeを使用して「Console Alias」を作成することができ、あなたが求めているものが...

  • をサポートしていませんが、ときにこれらの コンソールエイリアスが(永続的ではありません新しいコマンドを開く プロンプトウィンドウがすべて消えている)。
  • CMD /?次の2つのレジストリキーを私たちに知らせる:HKey_Local_Machine\Software\Microsoft\Command Processor\AutoRunHKey_Current_User\Software\Microsoft\Command Processor\AutoRun、新しいコマンドプロンプトウィンドウがあるとき、両方が(そのために)実行するための内容がチェックされます(限り/Dオプションが指定されていなかったとして)開かれた。

我々はFORループでこれら二つのことを一緒に入れて、自分のユーザーフォルダでの素敵な、簡単にカスタマイズできるファイルならば、私たちは、私はあなたが欲しいと思うものの非常に近い近似値を得ることができます。
これをHKLMに入れて、exportlinuxcommandsと呼ばれるファイルを%USERPROFILE%で参照すると、すべてのユーザーが利用できるようになりますが、ユーザー単位で簡単にカスタマイズできるだけでなく、設定したユーザーにとっても機能しますアップ。 1人のユーザーにのみ必要な場合、またはユーザーごとにカスタマイズできないようにする場合は、少し変更する必要があります。 HKey_Local_Machine\Software\Microsoft\Command Processor

    1. レジストリエディタを開き
    2. ゴーウィンドウの空の部分を右クリックして、選択したが、「新規」>「文字列値」(または「展開可能な文字列値」が、あなたはそれがとにかく値を読み取った後、コマンドプロセッサがそれらを拡大することを実現したときの展開は少し無意味に思える。)
    3. 名前も引用符「オートラン」()
    4. は、あなただけの
    5. を作成した新しい値をダブルクリックします
    6. "値データ"としてIF EXIST %USERPROFILE%\exportlinuxcommands FOR /F %i in (%USERPROFILE%\exportlinuxcommands) DO @doskey %i=bash -c "%i $*"と入力します。

    今、あなたは自分の%USERPROFILE%フォルダ(すなわちC:\Users\YourUserName)でファイルを作成する必要がありますが、あなたが別の行ににエイリアスをする各Linuxのコマンドを使用して、exportlinuxcommandsと呼ばれます。例:

    ls 
    rm 
    cat 
    

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

  • +0

    それはかなりきれいです!私はまだ現在の作業ディレクトリで 'bash'を起動しています(ほとんどの時代には働いているようですが、必ずしもそうではありません)。しかしそれ以外は、私がやりたいことに非常に近いです。私はパイプ( 'some-windows.exe | grep')でこれを動作させるのはやや複雑だと思います。 – bers

    +0

    現在の作業ディレクトリでbashが起動しないのはいつですか? – 3D1T0R

    +0

    残念ながら、doskeyのエイリアスは、コマンドラインの最初になければ動作しません。これは意図的な機能であり、dosコマンドと同じ名前のエイリアスを作成することができ、行の先頭に空白スペースを追加してコマンド自体を実行することもできます。 – 3D1T0R

    関連する問題