2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gitbash に Windows 環境変数(PATH)を通す

Posted at

環境

結論

.bashrcを以下の様に変更する
.git_profilegit for windowsが自動作成してくれる

.bashrc
+ # 環境変数の設定 LINUX書式のPATHに変換
+ export PATH=`cygpath -u $PATH`

参考

備忘録のようなメモ

Node.jsのバージョン管理fnmを導入したのですが、公式ページの通りに導入後、パッケージをグローバルインストールし、gitbashでコマンド実行するけどとどうも動かない。cmdでは動作する。

gitbash
$ fnm --version
fnm 1.29.2

$ fnm list
* v14.19.1
* v16.14.2 default
* system

$ node -v
v16.14.2

$ npm -v
8.5.0

$ vue --version
node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module 'C:\Program Files\Git\Users\[user]\AppData\Local\Temp\fnm
_multishells\3352_1649399178057\node_modules\@vue\cli\bin\vue.js'
?[90m    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:9
33:15)?[39m
?[90m    at Function.Module._load (node:internal/modules/cjs/loader:778:27)?[39m

?[90m    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/r
un_main:77:12)?[39m
?[90m    at node:internal/main/run_main_module:17:47?[39m {
  code: ?[32m'MODULE_NOT_FOUND'?[39m,
  requireStack: []
}
cmd.exe
C:\Users\[user]>vue --version
@vue/cli 5.0.4

gitbashでは何故かC:\Program Files\Git\を見に行ってしまっている。git for windowsのインストール先の問題かとユーザーホームディレクトリである%HOMEPATH%にインストールしても結果は同じ。

gitbash
$ vue --version
node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module 'C:\Users\[user]\Git\Users\[user]\AppData\Local\Temp\fnm
_multishells\3352_1649399178057\node_modules\@vue\cli\bin\vue.js'
?[90m    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:9
33:15)?[39m
?[90m    at Function.Module._load (node:internal/modules/cjs/loader:778:27)?[39m

?[90m    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/r
un_main:77:12)?[39m
?[90m    at node:internal/main/run_main_module:17:47?[39m {
  code: ?[32m'MODULE_NOT_FOUND'?[39m,
  requireStack: []
}

一通りインターネットの海を調べてみたが、どうも同様の事象自体が表立ってないみたい。諦めようかな。

最後の悪あがき程度に、開発者よろしくvueのデバッグを試みる。
まずは、fnmがどのnodeモジュールを使っているか探す。fnm envで大体わかる。

gitbash
$ fnm env
export PATH="C:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishells\\75112_1649
400296857":$PATH
export FNM_MULTISHELL_PATH="C:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishe
lls\\75112_1649400296857"
export FNM_VERSION_FILE_STRATEGY="local"
export FNM_DIR="C:\\Users\\[user]\\AppData\\Roaming\\fnm"
export FNM_LOGLEVEL="info"
export FNM_NODE_DIST_MIRROR="https://nodejs.org/dist"
export FNM_ARCH="x64"

FNM_MULTISHELL_PATHが示すディレクトリC:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishells\\75112_1649400296857内にvueがあるか探す。ビンゴ。

C:\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857\vue
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

case `uname` in
    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
  exec "$basedir/node"  "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
else 
  exec node  "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
fi

ぱっと見で変数basedirが変な値を参照しているのは明確なので、参照元であろう$0の値をコンソールに出力。

vue
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

+ echo $0

case `uname` in
    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
  exec "$basedir/node"  "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
else 
  exec node  "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
fi

vue --versionを実行

gitbash
$ vue --version
\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857/vue
node:internal/modules/cjs/loader:936
  throw err;
  ^

\Users\[user]\AppData、相対パスみたいなパスでコマンドが実行されている。c:\が無い。shell script自体、Windows上で実行される事を想定してないだろうからそりゃそうなるわなぁ(諦めモード

では次に、このWindows書式のパスであろう$0cygpath -w [path]でWindows書式に使用としている。意味なくね?デバッグ。

vue
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

+ echo $0

case `uname` in
    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac

+ echo $basedir

if [ -x "$basedir/node" ]; then
  exec "$basedir/node"  "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
else 
  exec node  "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
fi

vue --versionを実行

gitbash
$ vue --version
\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857/vue
C:\Program Files\Git\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857
node:internal/modules/cjs/loader:936
  throw err;
  ^

C:\Program Files\Git\Users\[user]\AppData。見たことあるパスがでてきた。

shell scriptは門外漢で詳しく無いので、推測でしかないが、unameがユーザーエージェントであると仮定して、該当のscriptは「ユーザーエージェントに*CYGWIN*|*MINGW*|*MSYS*が含まれる時、Windows上でエミュレート実行されていると想定し、UNIX書式→Windows書式に変換する」と読める。
では、コマンド実行される際のパスがUNIX書式になれば良いのではないか。と更に仮定してみる。さぁ、どこで指定されているのか。frm envだ。frm env はshellを吐き出すが、そのパスがWindows書式のパスだった。それをUNIX書式に変えてやれば良いのではないか。

gitbash
$ fnm env
export PATH="C:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishells\\75112_1649
400296857":$PATH
export FNM_MULTISHELL_PATH="C:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishe
lls\\75112_1649400296857"
export FNM_VERSION_FILE_STRATEGY="local"
export FNM_DIR="C:\\Users\\[user]\\AppData\\Roaming\\fnm"
export FNM_LOGLEVEL="info"
export FNM_NODE_DIST_MIRROR="https://nodejs.org/dist"
export FNM_ARCH="x64"

frm envを実行されると、環境変数$PATHには、Windows書式とUNIX書式のパスが混在している。

.bashrc
eval "$(fnm env --use-on-cd)"
gitbash
$ echo $PATH
C:\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857:/c/Users/
[users]/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/usr/bin:/mingw64/bin:/usr/bin:/c/
Users/[users]/bin:/c/Program Files (x86)/Intel/iCLS Client:/c/Program Files/Intel/
iCLS Client:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/WINDOWS/S
ystem32/WindowsPowerShell/v1.0:/c/Program Files (x86)/Intel/Intel(R) Management
Engine Components/DAL:/c/Program Files/Intel/Intel(R) Management Engine Componen
ts/DAL:/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/IPT:/c
/Program Files/Intel/Intel(R) Management Engine Components/IPT:/c/Program Files/
Intel/WiFi/bin:/c/Program Files/Common Files/Intel/WirelessCommon:/c/WINDOWS/Sys
tem32/OpenSSH:/c/Program Files/Microsoft SQL Server/Client SDK/ODBC/110/Tools/Bi
nn:/c/Program Files (x86)/Microsoft SQL Server/120/Tools/Binn:/c/Program Files/M
icrosoft SQL Server/120/Tools/Binn:/c/Program Files/Microsoft SQL Server/120/DTS
/Binn:/c/Program Files (x86)/Microsoft SQL Server/120/Tools/Binn/ManagementStudi
o:/c/Program Files (x86)/Microsoft SQL Server/120/DTS/Binn:/c/Program Files (x86
)/Google/Cloud SDK/google-cloud-sdk/bin:/c/Program Files/Microsoft VS Code/bin:/
c/java/jdk-15.0.1/bin:/c/ProgramData/chocolatey/bin:/c/Program Files (x86)/Power
Shell/7:/cmd:/c/Users/[users]/AppData/Local/Microsoft/WindowsApps:/c/Users/[users]/A
ppData/Local/GitHubDesktop/bin:/c/Users/[users]/AppData/Local/Microsoft/WindowsApp
s:/usr/bin/vendor_perl:/usr/bin/core_perl

じゃぁ、Windows書式→UNIX書式に変えてみる。

.bashrc
eval "$(fnm env --use-on-cd)"

+ # Convert and set Windows environment variables to LINUX-style PATH.
+ export PATH=`cygpath -u $PATH`
gitbash
$ echo $PATH
/tmp/fnm_multishells/75112_1649400296857:/c/Users/[user]/bin:/mingw64/bin:/usr/loc
al/bin:/usr/bin:/usr/bin:/mingw64/bin:/usr/bin:/c/Users/[user]/bin:/c/Program Fil
es (x86)/Intel/iCLS Client:/c/Program Files/Intel/iCLS Client:/c/WINDOWS/system3
2:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/WINDOWS/System32/WindowsPowerShell/v1.0
:/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/c/Progr
am Files/Intel/Intel(R) Management Engine Components/DAL:/c/Program Files (x86)/
Intel/Intel(R) Management Engine Components/IPT:/c/Program Files/Intel/Intel(R)
Management Engine Components/IPT:/c/Program Files/Intel/WiFi/bin:/c/Program File
s/Common Files/Intel/WirelessCommon:/c/WINDOWS/System32/OpenSSH:/c/Program Files
/Microsoft SQL Server/Client SDK/ODBC/110/Tools/Binn:/c/Program Files (x86)/Micr
osoft SQL Server/120/Tools/Binn:/c/Program Files/Microsoft SQL Server/120/Tools/
Binn:/c/Program Files/Microsoft SQL Server/120/DTS/Binn:/c/Program Files (x86)/M
icrosoft SQL Server/120/Tools/Binn/ManagementStudio:/c/Program Files (x86)/Micro
soft SQL Server/120/DTS/Binn:/c/Program Files (x86)/Google/Cloud SDK/google-clou
d-sdk/bin:/c/Program Files/Microsoft VS Code/bin:/c/java/jdk-15.0.1/bin:/c/Progr
amData/chocolatey/bin:/c/Program Files (x86)/PowerShell/7:/cmd:/c/Users/[user]/Ap
pData/Local/Microsoft/WindowsApps:/c/Users/[user]/AppData/Local/GitHubDesktop/bin
:/c/Users/[user]/AppData/Local/Microsoft/WindowsApps:/usr/bin/vendor_perl:/usr/bi
n/core_perl

C:\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857

/tmp/fnm_multishells/75112_1649400296857

おお・・・。ぽい。。。

gitbash
$ vue --version
/tmp/fnm_multishells/75112_1649400296857/vue
C:\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857
@vue/cli 5.0.4

おお・・・。綺麗に変換された。うえに動いた。

スッキリ

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?