2017-09-20 145 views
3

我想在Windows 10的命令行中使用ls和許多其他Linux工具。我知道有GnuWin32和其他二進制替換,但這些工作都不如Linux子系統(WSL)的優雅, ;包括更新機制。如何在Windows命令行中通過WSL調用Linux命令?

有了WSL,人們可以通過bash -c "ls ..."從命令行調用ls ...,這很好用。然而,理想情況下,我只需在命令行輸入ls。我可以創建一個ls.bat,它基本上是@bash -c "ls %*" - 但我必須爲每個要導出的命令執行此操作。有沒有更直接的方式將ls(以及其他許多)導出到命令行?

+1

WSL中提供的bash命令不打算在WSL之外使用。如果實施了,我會感到驚訝。 – ifconfig

+0

@ifconfig嗯,它並沒有打算或實施。我會很高興用一行一行的「衆多」知名Linux命令來對各自的WSL命令進行別名。 – bers

回答

1

顯然這是most requested feature for WSL,微軟現在支持這個功能。要從命令提示符(或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

微軟不直接支持你問然而,對於...

  • 您可以創建一個「Console Alias」使用Doskey.exe的,但這些 控制檯別名是不是持久的(當你打開一個新的命令 提示窗口他們都沒了)。
  • CMD /?告訴我們以下兩個註冊表項:HKey_Local_Machine\Software\Microsoft\Command Processor\AutoRunHKey_Current_User\Software\Microsoft\Command Processor\AutoRun,它(只要不是指定的/D選項中)都將用於內容的運行進行檢查(按順序),當一個新的命令提示符窗口打開。

如果我們用FOR循環,並在您的用戶文件夾一個很好的,很容易定製文件把這兩個東西放在一起,我們可以得到什麼,我想你想要一個漂亮的接近。
我打算把它放在HKLM中,並引用%USERPROFILE%中的一個文件,名爲exportlinuxcommands,這樣它就可以供所有用戶使用,但可以根據每個用戶輕鬆進行自定義,並且僅對用戶進行設置向上。如果您只希望爲一位用戶提供服務,或者不希望其針對每位用戶進行定製,則必須稍微修改說明。

  1. 打開註冊表編輯器
  2. 轉到HKey_Local_Machine\Software\Microsoft\Command Processor
  3. 右鍵單擊窗口的空白部分,然後選擇「新建」>「字符串值」(或「可擴充字符串值」,但擴展似乎有點毫無意義,當你意識到命令處理器將擴大他們反正讀取值之後。)
  4. 將它命名爲「自動運行」(不帶引號)
  5. 剛創建
  6. 新的值雙擊
  7. 輸入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 

要刪除一個?將其從文件中刪除,並且它不會出現在您打開的下一個命令提示符窗口中。
想再添加一個嗎?只需將它添加到它自己的行上的文件中,下次打開命令提示符窗口時,它就會在那裏。

+0

這非常整齊!我仍在努力在當前的工作目錄中啓動'bash'(似乎大部分時間都在工作,但並不總是),但除此之外,這與我想要做的非常接近。但是,我猜想,使用管道('some-windows.exe | grep')工作會稍微複雜些。 – bers

+0

什麼時候bash沒有在當前工作目錄中啓動? – 3D1T0R

+0

不幸的是,doskey別名不起作用,除非它們在命令行的開頭。這是一個有意的功能,它允許您使用與dos命令同名的別名,並且仍然可以通過在該行的開頭添加空格來運行命令本身。 – 3D1T0R