如何在Windows Powershell中为gnuwin32工具创建自定义别名


0

我已经安装了gnuwin32并将其附加到我的环境中,因此在命令提示符下键入ls时,我会运行linux / unix“ ls”。显然,这对于Powershell而言不是问题,但是我无法创建具有相同名称(ls)或不同名称(lsa / ll / ld)的自定义别名,并且出现以下错误:

The script failed due to call depth overflow.
+ CategoryInfo          : InvalidOperation: (0:Int32) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : CallDepthOverflow

现在,这是我的Powershell脚本:

Set-Alias -name ls -value ListDirectory -Option AllScope

Function ListDirectory { 
    $Command = "ls -I ntuser\.* -I NTUSER\.*";
    Invoke-Expression $Command
}

有任何想法吗?关于忽略文件,我需要它们。为了确保此命令在旧命令提示符下正常工作,我在Powershell中仅遇到了问题:(


您正在创建一个不定式循环。我会尝试$Command = "ls.exe -I ntuser\.* -I NTUSER\.*";
LotPings

好点@LotPings,这实际上可能是我的问题的答案!我意识到我暂时不需要gnuwin32,但是如果我重新安装它,我将确保输入.EXE而不只是“ ls”或“ grep”或任何其他命令!感谢臀部
prubini87

Answers:


0

@LotPings你是对的!将“ .exe”添加到ls可以实现 “技巧”。我添加了一个循环,以获取可能想要传递给它的最终参数,并将这些参数放在$ Command变量中。我不确定我是否以最佳方式做到了这一点,但它确实有效!呵呵。再次感谢!

# gnuwin32 "ls"
Set-Alias -name ls -value ListDirectory -Option AllScope

Function ListDirectory {
    $allArgs = "";
    For ($i=0; $i -lt $args.Length; $i++) {
        $allArgs += $args[$i] + " ";
    }

    $Command = "ls.exe $allArgs -I ntuser\.* -I NTUSER\.*";
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.