Не удается запустить приложение 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
в конце сценария вашего профиля.