GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa menjalankan Windows yang dapat dieksekusi dari WSL (Ubuntu) Bash

Dalam Pembaruan Windows 10 Creators (build 1703, April 2017), ini didukung secara native. Jadi sekarang Anda dapat menjalankan binari Windows dari Linux...

notepad.exe atau .exe lainnya (ekstensi diperlukan dan harus berada di jalur Anda, beberapa versi lama memerlukan seluruh jalur)

...dan sebaliknya menggunakan salah satu dari yang berikut:

  • bash.exe -c command_to_run yaitu:bash.exe -c ls
  • bash -c command_to_run yaitu:bash -c ls
  • wsl command_to_run yaitu:wsl "ls"; atau tentukan distro yang ingin Anda gunakan untuk menjalankannya menggunakan:
    • ubuntu run ls

Untuk informasi selengkapnya, lihat artikel tertaut di atas.


mengapa tidak menggunakan saja

$ powershell.exe Start filename

Start adalah Windows yang setara dengan xdg-open di sebagian besar linux atau open di macOS, yang berarti "buka dengan aplikasi desktop default". Saya suka menggunakan alias untuk membuka.


Solusi asli

Solusi resmi yang disediakan dengan Pembaruan Windows 10 Insider Preview (14951) didasarkan pada binfmt_msc yang hampir terlupakan Fasilitas Linux untuk meluncurkan binari. Perintah pendaftaran untuk binfmt_misc akan seperti ini (di mana /init adalah binfmt_misc sementara "penerjemah" untuk win-executable):

sudo echo ":WSLInterop:M::MZ::/init:" > /proc/sys/fs/binfmt_misc/register

Dan kemudian win-executable akan diluncurkan seperti program biasa:

$ export PATH=$PATH:/mnt/c/Windows/System32
$ notepad.exe
$ ipconfig.exe | grep IPv4 | cut -d: -f2
$ ls -la | findstr.exe foo.txt
$ cmd.exe /c dir

Bukan berarti setiap win-executable harus berada di windows (DrvFs ) sistem file - bukan pada sistem file Linux (VolFs ) - untuk mewarisi Windows yang tepat direktori kerja.

cbwin alternatif

Hingga Anda mendapatkan build terbaru, project cbwin menawarkan solusi, dengan menginstal 3 perintah linux baru di dalam WSL:

  • wcmd :memanggil win-executable melalui cmd.exe .
  • wrun :memanggil win-executable secara sinkron dengan CreateProcess , dan tunggu mati (tidak menggunakan cmd.exe ).
  • wstart :meluncurkan perintah terpisah (asynchronously) (dengan menggunakan cmd.exe ).

Untuk menggunakannya, Anda harus:

  1. Instal cbwin :
    • outbash.exe baru akan diinstal di sistem file Windows reguler Anda (di suatu tempat di %PATH% Anda ), ditambah
    • 3 perintah-linux dalam sistem file WSL.
  2. Gunakan outbash.exe ini (di mana pun Anda menginstalnya) untuk memulai WSL, BUKAN C:\Windows\System32\bash.exe !
  3. Awali setiap win-executable dengan salah satu dari perintah tersebut, mis. wrun notepad .

Kiat: Jika executable diluncurkan dengan wcmd atau wrun memunculkan anak mana pun, ini hanya bertahan selama yang dapat dieksekusi tetap hidup.

Dengan kata lain, mencoba memulai notepad.exe dengan wcmd tidak akan berfungsi, karena notepad akan dimatikan setelah diluncurkan -- Gunakan wrun (sinkron) atau wstart (asinkron) dalam hal ini.


Linux
  1. Bagaimana cara menjalankan Ubuntu di Windows 10 di VirtualBox?

  2. (C/C++) Bagaimana cara menghasilkan file yang dapat dieksekusi yang dapat berjalan di Windows dan Linux?

  3. Bagaimana saya bisa mendapatkan nilai unik dari array di Bash?

  1. Bagaimana Cara Mengatur Bash Untuk Menjalankan *.exe Dengan Mono?

  2. Bagaimana Cara Menjalankan File .exe Di Ubuntu??

  3. Membuka Sublime Text dari Bash di Ubuntu di Windows

  1. Bagaimana saya bisa menjalankan aplikasi OpenGL yang terinstal di mesin linux dari mesin windows saya?

  2. Bagaimana cara mengatur &menjalankan PhantomJS di Ubuntu?

  3. Bagaimana saya bisa menjalankan fungsi dari skrip di baris perintah?