Не удается запустить приложение elixir из powershell

когда я типа iex -S mix в PowerShell я получаю эту ошибку:

Invoke-Expression : A positional parameter cannot be found that accepts argument 'mix'.
At line:1 char:1
+ iex S mix
+ ~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand

Как правильно написать "- S mix "после команды "iex", чтобы получить тот же эффект, набрав его в cmd? Это проблема, когда я не понимаю синтаксис PowerShell, который я считаю.

3 ответов


проблема в том, что iex - псевдоним в Powershell, сокращение от Invoke-Expression. Если вы пытаетесь выполнить команду iex.exe, iex.bat или iex.cmd, вам нужно будет указать его каким-то уникальным способом: явного (или полного) пути или даже просто добавить расширение приложения может быть достаточно. Таким образом, Powershell не будет пытаться запустить Invoke-Expression.

Get-Command может прояснить для вас такие вещи:

PS C:\Dir> Get-Command iex

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Alias           iex -> Invoke-Expression 

PS C:\Dir> Get-Command cmd

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Application     cmd.exe

кажется невозможным перечислить оба типа команд и путь в то же время: если вы хотите увидеть, какие iex - это что, вы можете использовать эту форму:

PS C:\Dir> Get-Command -All iex -Syntax
Invoke-Expression
C:\windows\iex.bat

вы можете узнать больше о том, как Powershell решает, какую команду запускать в Microsoft библиотека technet.


для всех, кто может увидеть этот вопрос:

короткий ответ--для запуска iex из Powershell типа iex.bat. В данном конкретном случае iex.bat -S mix


если вы используете эликсир на разных платформах и не нуждаетесь в еще одном источнике несогласованности (например, нужно помнить use iex.bat вместо iex) можно удалить Invoke-Expression псевдоним, как так:

Remove-Item alias:\iex -Force

теперь вы можете iex -S mix или что вашей душе угодно. Просто имейте в виду, что это может конфликтовать с другими сценариями, которые вы можете запустить, которые предполагают iex - это псевдоним Invoke-Expression. Например, у меня были проблемы с Azure SDK при un-binding iex, но я больше не делайте Elixir и Azure dev на одной машине, и я еще не сталкивался с другими проблемами.

если вы хотите, чтобы это произошло автоматически, добавьте его в свой профиль Powershell. Самый простой способ-запустить notepad $PROFILE из Powershell, а затем добавить Remove-Item alias:\iex -Force в конце сценария вашего профиля.