windows 有没有办法将ls从Get-ChildItem重新Map到PowerShell中的另一个命令?

bttbmeg0  于 2023-10-22  发布在  Windows
关注(0)|答案(1)|浏览(97)

尝试将默认的PowerShell Get-ChildItem命令(在PowerShell 7中默认Map为ls)替换为eza,但我似乎找不到任何关于如何执行此操作的信息

  • 使用New-Alias导致 * 不允许使用别名 *
Line |
  15 |  New-Alias -Name ls -Value eza.exe # Eza map to ls
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The alias is not allowed, because an alias with the name 'ls' already exists.
  • 使用下面的函数不起作用,它只是再次调用Get-ChildItem(虽然如果我,例如,切换lsla它确实工作,所以我不认为函数本身是不正确的)
function ls {
    [string]$Path # path for ls
    eza.exe -lab --group-directories-first --git --icons $Path
}
ghhaqwfi

ghhaqwfi1#

您需要使用-Force来覆盖现有别名:

New-Alias -Name ls -Value eza.exe -Force

或者更简单,使用Set-Alias或使用alias:修饰符赋值:

Set-Alias ls -Value eza.exe
# or
$alias:ls = 'eza.exe'

至于定义具有相同名称的函数,请注意,PowerShell中的别名位于命令优先级的顶部,这意味着具有相同名称的函数不会覆盖它们。
然而,你可以用不同的方式命名你的函数,并用Alias attribute装饰它,那么你就很好了(注意,你也缺少了一个param block):

function My-Func {
    [alias('ls')]
    param(
        [string]$Path # path for ls
    )

    eza.exe -lab --group-directories-first --git --icons $Path
}

相关问题