windows Powershell函数不能处理空格

iyfjxgzm  于 2023-05-19  发布在  Windows
关注(0)|答案(1)|浏览(148)

我正在尝试在PowerShell中设置别名。由于一些奇怪的原因,它们不支持空格(参数),所以我必须创建一个函数来代替
我运行了这个命令:
function glo { git log --oneline }
我希望之后我可以使用glo运行这个。但是运行glo会导致glo : The term 'git log --oneline' is not recognized as the name of a cmdlet, function, script file, operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again而不是运行git log --oneline
如何设置此别名?为什么在Powershell中设置别名很困难,而在Linux中使用.zshrc.bashrc文件很容易。

o7jaxewo

o7jaxewo1#

注意:您问题中的函数定义在技术上是正确的,但错误消息表明您使用了 * 不同的 * 函数定义-请参阅底部部分。第一部分包含“一般”信息。

  • 与POSIX兼容的shell(如bash)不同,您*不能在PowerShell alias定义中包含传递参数 *-您确实需要一个function
  • 使用自动$args变量将传递给函数的所有参数**中继到其目标命令行(如果需要)。
    PowerShell别名-根据设计-只是其他命令的 * 替代名称,**不能 “烘焙”参数-有关别名与PowerShell中的this answer函数。

因此:

# Defines a 'glo' command that executes `git log --oneline` with 
# additional arguments, if any, passed through.
function glo { git log --oneline @args }
  • 请注意,使用的是@args而不是$args,后者是参数splatting的示例,它带有一个 array 变量,将数组的元素 * 作为单独的参数 * 传递给目标命令。
  • 因为你调用的是一个 * 外部程序 *(git),这不是绝对必要的,因为$args也会这么做;但是,如果目标命令是 PowerShell 命令,则只有@args会单独传递所有参数。
  • 注意:如果传递 no 参数,该函数也可以工作,在这种情况下执行git log --oneline
  • 有关 Package 命令的更复杂方法,请参见this answer
  • 使此类“别名”( Package 函数)在以后的所有会话中可用,请将其添加到您的**$PROFILE**文件中。

至于你尝试了什么
您的问题中的函数定义function glo { git log --oneline }实际上是正确的,假设您在调用glo时不需要支持额外的临时传递参数。
但是,您显示的错误消息意味着您将函数定义为:

# !! BROKEN
function glo { & 'git log --oneline' }

这是不可能的,因为调用操作符&只需要 * 命令名或可执行路径 * 作为它的第一个参数-任何 * 参数 * 都必须单独传递。
如果你想在函数定义中使用&-这是不必要的,因为命令名git既没有空格也不是用 * 变量 * 表示的-将函数体定义为:
& git log --oneline

相关问题