【问题标题】:Cannot run elixir application from powershell无法从 powershell 运行 elixir 应用程序
【发布时间】:2018-07-18 21:22:53
【问题描述】:

当我在 PowerShell 中键入 iex -S mix 时,我收到此错误:

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

在“iex”命令之后编写“-S mix”以获得与在 cmd 中键入相同的效果的正确方法是什么?这是我不理解我相信的 PowerShell 语法的问题。

【问题讨论】:

  • iex 和灵药有关系吗?
  • -s 到底应该是什么? iexInvoke-Expression 的别名,没有任何以S 命名或开头的参数。
  • @PaulHicks 是的 iex 代表交互式长生不老药,我试图运行它而不是 Invoke-Expression

标签: powershell elixir


【解决方案1】:

问题是iex是Powershell中的别名,是Invoke-Expression的缩写。如果您尝试运行命令 iex.exeiex.batiex.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

您可以在 Microsoft 的 technet library 中了解有关 Powershell 如何决定运行哪个命令的更多信息。

【讨论】:

  • 啊,好电话;我错过了最后一个重要的推论,即他可能试图称呼别的东西。我要补充一点,使用 Get-Command iex 将准确显示 PowerShell 试图运行的内容,这将为他清除它,我将包含指向 about_Command_Precedence 的链接。
  • 按照建议完成。
  • 干得好;也许还提到-All 以显示给定命令的所有 形式,按优先级降序排列。 Quibble:您不一定需要完整的路径;在手头的情况下,添加 extension 就足够了;即,使用完整的 文件名iex.bat.
【解决方案2】:

对于可能看到此问题的其他人:

简答——从 Powershell 类型 iex.bat 中运行 iex。在这种特殊情况下iex.bat -S mix

【讨论】:

    【解决方案3】:

    如果您在不同平台上使用 Elixir 并且不需要另一个不一致的来源(例如需要记住使用 iex.bat 而不是 iex),您可以像这样删除 Invoke-Expression 别名:

    Remove-Item alias:\iex -Force
    

    现在您可以iex -S mix 或任何您喜欢的内容。请注意,这可能与您可能运行的其他脚本冲突,假设iex 是别名Invoke-Expression。例如,我在解除绑定 iex 时遇到了 Azure SDK 的问题,但我不再在同一台机器上使用 Elixir 和 Azure dev,而且我还没有遇到任何其他问题。

    如果您想自动执行此操作,请将其添加到您的 Powershell 配置文件中。最简单的方法是从 Powershell 运行 notepad $PROFILE,然后在配置文件脚本的末尾附近添加 Remove-Item alias:\iex -Force

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      相关资源
      最近更新 更多