使用yargs设置命令行完成

Sha*_*mal 3 command-line-arguments node.js yargs

我正在使用节点JS创建脚本,并希望使用yargs启用异步命令行完成。

yargs文档完成部分说:“将生成的脚本连接到.bashrc或.bash_profile”

但是我看不到有关如何生成脚本的任何信息。

Sha*_*mal 5

文档尚不完全清楚如何执行此操作,但我知道了。

安装yargs

npm install -g yargs
Run Code Online (Sandbox Code Playgroud)

创建您的脚本(例如script.js

#! /usr/local/bin/node
var argv = require('yargs')
    .completion('completion', function(current, argv, done) {
        setTimeout(function() {
          done([
            'apple',
            'banana'
          ]);
        }, 500);
    })
    .argv;
Run Code Online (Sandbox Code Playgroud)

保存脚本并设置权限

chmod +x script.js
Run Code Online (Sandbox Code Playgroud)

在命令行上,将命令名称(完成调用中的第一个参数)传递给脚本作为第一个参数。

./script.js completion
Run Code Online (Sandbox Code Playgroud)

这将输出命令行完成块以添加到.bashrc或.bash_profile

_yargs_completions()
{
    local cur_word args type_list

    cur_word="${COMP_WORDS[COMP_CWORD]}"
    args=$(printf "%s " "${COMP_WORDS[@]}")

    # ask yargs to generate completions.
    type_list=`./shan.js --get-yargs-completions $args`

    COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) )

    # if no match was found, fall back to filename completion
    if [ ${#COMPREPLY[@]} -eq 0 ]; then
      COMPREPLY=( $(compgen -f -- "${cur_word}" ) )
    fi

    return 0
}
Run Code Online (Sandbox Code Playgroud)

  • 如果有人需要更多信息,这里有其他文档:https://yargs.js.org/docs/#api-reference-completioncmd-description-fn (2认同)