読者です 読者をやめる 読者になる 読者になる

Bash on Ubuntu on Windows から Windows 側の atom を起動する

(Windows 10 Creators Update 適用後の) Bash on Ubuntu on Windows (以下 BoW) 上で $ atom して Windows にインストールされた atom を起動したい。

結論

とりあえず次のようなエイリアスを設定すると動く。

alias atom='cmd.exe /C "C:\Users\(username)\AppData\Local\atom\bin\atom.cmd"'

引数もちゃんと渡してくれる。

$ atom -h

Atom Editor v1.16.0

Usage: atom [options] [path ...]
(以下略)

ところで1

実は元から atom でパスが通っているのだが、試してみると

$ which atom
/mnt/c/Users/(username)/AppData/Local/atom/bin/atom
$ atom
/mnt/c/Users/(username)/AppData/Local/atom/bin/../app-1.16.0/resources/cli/atom.sh: 9 行: pwd: -W: 無効なオプションです
pwd: 使用法: pwd [-LP]
'/atom.cmd' is not recognized as an internal or external command,
operable program or batch file.

というように atom.sh がおかしいと言われる。 atom.sh を見てみると

$ cat /mnt/c/Users/(username)/AppData/Local/atom/app-1.16.0/resources/cli/atom.sh
#!/bin/bash
# Get current path in Windows format
if command -v "cygpath" > /dev/null; then
  # We have cygpath to do the conversion
  ATOMCMD=$(cygpath "$(dirname "$0")/atom.cmd" -a -w)
else
  # We don't have cygpath so try pwd -W
  pushd "$(dirname "$0")" > /dev/null
  ATOMCMD="$(pwd -W)/atom.cmd"
  popd > /dev/null
fi
if [ "$(uname -o)" == "Msys" ]; then
  cmd.exe //C "$ATOMCMD" "$@" # Msys thinks /C is a Windows path...
else
  cmd.exe /C "$ATOMCMD" "$@" # Cygwin does not
fi

というように Cygwin 向けの何かのようだが、コメントのおかげで cmd.exe に Windows 側での atom.cmd のパスを与えればよさそうなことはわかる。 コメントは素晴らしい。

ところで2

atom.exe を試すとどうなるか。 $ which atom.exe してもパスが通っていないので頑張って書くと

$ /mnt/c/Users/(username)/AppData/Local/atom/atom.exe

なんと atom が起動する。 しかし引数を受け取ってもらえないようで

$ /mnt/c/Users/(username)/AppData/Local/atom/atom.exe -h

しても普通に atom が起動してしまう。*1

*1:Windows PowerShell からでも同様