我用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,但没有任何内容告诉我如何评估外部脚本的输出。
1条答案
按热度按时间juud5qan1#
Invoke-Expression
不调用脚本,它计算字符串。所以第一步是评估,这基本上和bash中的一样。如果这是一行,这将是一个字符串,但它是多行,所以返回一个字符串数组。你得加入他们。
Out-String
就是一种方法。这可以馈送到
Invoke-Expression
。你可以把这一行放在powershell profile中。