我刚刚grep通过并使用它安装在 PowerShell 上chocolatey,我可以从任何文本中搜索我想要的字符串,如下所示:
但是,我不想总是输入grep --color,因此我尝试为我创建一个别名,$profile如下所示:
Function grep($a1){
grep --color $a1
}
Run Code Online (Sandbox Code Playgroud)
但随后我会得到一个错误:
所以我尝试:
Set-Alias grep "grep --color"
Run Code Online (Sandbox Code Playgroud)
但后来我又收到另一个错误:
我想不出任何其他方法可以使这项工作成功,因此我非常感谢任何帮助。
PowerShell 中的别名仅仅是其他命令的替代名称,因此您不能使用它们来包含传递给这些其他命令的参数。
因此,您确实需要一个function,但由于您将其命名为与您正在包装的外部程序相同的名称,因此您需要消除歧义以避免无限递归:
function grep {
$externalGrep = Get-Command -Type Application grep
if ($MyInvocation.ExpectingInput) { # pipeline (stdin) input present
# $args passes all arguments through.
$input | & $externalGrep --color $args
} else {
& $externalGrep --color $args
}
}
Run Code Online (Sandbox Code Playgroud)
笔记:
$input变量来中继管道(stdin)输入意味着首先完整地收集(缓冲)该输入。需要付出更多努力来实现真正的流媒体解决方案 - 请参阅此答案的示例。或者 - 至少在类 Unix 平台上 - 您可以设置一个环境变量来控制 的grep着色行为,这可能会消除对函数包装器的需要;该参数的等效项--color是设置$env:GREP_COLOR='always'(其他支持的值是'never'和'auto')。
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |