課題
PowerShellでElixirのiex
を起動しようとすると、代わりにコマンドレットのInvoke-Expression
が実行されてしまい、失敗する。
iex
がInvoke-Expression
のエイリアス(別名)として登録されているためである。
PS C:\> iex
cmdlet Invoke-Expression at command pipeline position 1
Supply values for the following parameters:
Command:
Get-Alias
で確認すると、確かにiex
がエイリアスになっている。
PS C:\> Get-Alias iex
CommandType Name Version Source
----------- ---- ------- ------
Alias iex -> Invoke-Expression
対処法1
PowerShellではなくコマンドプロンプトを使う。
対処法2
iex
でなくiex.bat
と拡張子まで入力すればElixirのほうのiex
が起動できる。
対処法3
エイリアスからiex
を削除する。
Remove-Item alias:iex -Force
で削除できる。
(read-onlyプロパティの設定されたエイリアスを消すには -Force
パラメータが必要)
PS C:\> Remove-Item alias:iex -Force
PS C:\> iex
Interactive Elixir (1.10.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
ただしこの方法ではPowerShellを起動するたびに設定が元に戻ってしまうので、毎回Remove-Item
しなければならず面倒である。
対処法4
PowerShellプロファイルを編集する。
まずはプロファイルの場所を確認。
PS C:\> $PROFILE
(プロファイルの場所が表示される)
この場所にプロファイルを用意すれば良い。
まだプロファイルが無い場合は、以下のコマンドで空のプロファイルを作成できる。
PS C:\> New-Item $PROFILE -Force -Type FILE
プロファイルが作成されるので、メモ帳などで編集してやればよい。
PowerShellから直接メモ帳で開くこともできる。
PS C:\> notepad $PROFILE
ここに
Remove-Item alias:iex -Force
を書いて保存すればOK。
これで次回のPowerShell起動時からは、最初から
Remove-Item alias:iex -Force
が実行されたのと同じ状態になる。
元に戻したい時はプロファイルの内容を消すか、ファイルごと削除すればよい。
参考
Elixir ForumのQ&A
https://elixirforum.com/t/iex-in-windows-powershell/14622
PowerShellプロファイルについて
http://acoustic-groove2.hatenablog.com/entry/2017/12/06/013928
PowerShell 5 と 6 で Profile の場所が違う
http://www.vwnet.jp/windows/PowerShell/2018032601/PS6Profile.htm