rust 如何在PowerShell中评估程序输出

mbyulnm0  于 2023-06-23  发布在  Shell
关注(0)|答案(1)|浏览(123)

我用Rust编写了一个命令行实用程序,由clap_complete crate提供参数完成。这将生成Bash和PowerShell完成脚本:

$ ex --completion=bash
_ex() {
    local i cur prev opts cmd
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    cmd=""
    opts=""
...
$ ex --completion=ps
using namespace System.Management.Automation
using namespace System.Management.Automation.Language

Register-ArgumentCompleter -Native -CommandName 'ex' -ScriptBlock {
    param($wordToComplete, $commandAst, $cursorPosition)
...

我可以通过更新我的.bashrc文件来支持新的交互式Bash会话中的参数完成,它使用进程替换来评估命令输出:

source <(ex --completion=bash)

我如何在PowerShell中做同样的事情?我在谷歌上搜索了很多,发现了很多描述如何调用外部脚本的页面,比如Invoke-Expression cmdlet,但没有任何内容告诉我如何评估外部脚本的输出。

juud5qan

juud5qan1#

Invoke-Expression不调用脚本,它计算字符串。所以第一步是评估,这基本上和bash中的一样。

ex --completion=ps

如果这是一行,这将是一个字符串,但它是多行,所以返回一个字符串数组。你得加入他们。Out-String就是一种方法。

ex --completion=ps | Out-String

这可以馈送到Invoke-Expression

ex --completion=ps | Out-String | Invoke-Expression

你可以把这一行放在powershell profile中。

相关问题