Android StudioとJDK 8がWindowsにインストールされていますが、WSLでJDK cliを使用できません。Java
またはjavac
と入力すると、コマンドが見つかりません。提案 here を実行したところ、Java.exe
とjavac.exe
を入力してWSLからコマンドにアクセスできるようになりましたが、 .exe
拡張子を指定します。私の考えは、実行可能ファイルを指すシンボリックリンクを追加することですが、実行可能ファイルへのパス(/mnt/c/...
)を指定する必要はありません。それで、PATH内の場所を指すシンボリックリンクを作成できますか?これが意味をなさない場合は、これを試してみました:
Sudo ln -s -t Java.exe Java
"failed to access 'Java.exe': No such file or directory"
を取得しました。しかし、これはまさに私が達成したいものです。PATHには既に実行可能ファイルがあるため、実行可能ファイルへの実際のパスを指定せずに、PATH内の実行可能ファイルへのシンボリックリンク。私が狂っていて、これがばかげている/不可能/不必要である場合、あなたはそれを答えとして言うことができ、私はそれを受け入れます! :-D
実行可能ファイルの前にパスを付ける必要があります。または、Linux PATH
環境変数を変更して、Windowsパス(/mnt/c/
で始まる)を追加することもできます。
From: WindowsとのLinux相互運用性のためのWindowsサブシステム
WSLからのWindowsバイナリの呼び出し
LinuxのWindowsサブシステムは、WSLコマンドラインから直接Windowsバイナリを呼び出すことができます。この方法で実行されるアプリケーションには、次のプロパティがあります。
- 以下で説明するシナリオを除き、作業ディレクトリをWSLコマンドプロンプトとして保持します。
- Bash.exeプロセスと同じ権限を持っている。
- アクティブなWindowsユーザーとして実行します。
- CMDプロンプトから直接実行されたかのように、Windowsタスクマネージャーに表示されます。
例:
$ /mnt/c/Windows/System32/notepad.exe
WSLでは、これらの実行可能ファイルはネイティブLinux実行可能ファイルと同様に処理されます。これは、Linuxパスにディレクトリを追加し、コマンド間のパイプが期待どおりに機能することを意味します。例:
$ 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
Windowsバイナリは、ファイル拡張子を含み、ファイルの大文字と小文字を一致させ、実行可能でなければなりません。バッチスクリプトや
dir
などのコマンドを含む非実行可能ファイルは、/mnt/c/Windows/System32/cmd.exe /C
コマンドで実行できます。例:
$ /mnt/c/Windows/System32/cmd.exe /C dir $ /mnt/c/Windows/System32/PING.EXE www.Microsoft.com
パラメータは変更されずにWindowsバイナリに渡されます。
Linuxでも、シンボリックリンクにはパスが含まれています。次のコマンドを例にとります。
$ ls -la /bin | grep ^l
(...SNIP...)
lrwxrwxrwx 1 root root 20 Jun 27 09:49 systemd -> /lib/systemd
systemd
は/lib/systemd/systemd
にリンクされています。だからあなたのシンボリックリンク:
Sudo ln -s -t Java.exe Java
私は(私はリンクの専門家ではないので)次のようなものになる必要があると思います:
Sudo ln -s -t /mnt/c/Windows/Path/To/Java.exe Java
alias
を使用シンボリックリンクではなく、~/.bashrc
ファイルにエイリアスを作成します。
alias Java='/mnt/c/WindowsPathTo/Java.exe'
次に、Java
と入力すると、mumbo-jumboが入力されます。渡されたパラメータはすべて尊重されます。
私はFish-Shellを使用していますが、エイリアスリンクとシンボリックリンクの両方が実際には機能しないことがわかりました。魚の問題かどうかはわかりませんが、Windowsの奇妙なパスの命名が問題だと思います。
私の解決策は、fish.config(.bashrcに相当)に関数を追加することでした。
function npp
"/mnt/c/Program Files (x86)/Notepad++/notepad++.exe" $argv
end
(魚の$ argvはbashの$ *と同等です)
それから私はNotepad ++を呼び出すことができます:npp test.txt