我已安装 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 中遇到问题 :(
答案1
@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\.*";
}