代码之家  ›  专栏  ›  技术社区  ›  Harold1983-

Bash/php—有没有实现参数的tab键自动完成的方法?

  •  13
  • Harold1983-  · 技术社区  · 14 年前

    我有一个PHP命令行脚本,它将作业启动到作业服务器,作业名称是一个参数。作业名称是有名称空间的,例如Foo:Bar\u Baz\u JobName。有没有一种方法可以实现自动完成,比如键入文件名的前几个字母,然后按tab bash来完成文件名。我知道这是可以做到的,因为tab completion可以在ubuntu和apt-get上工作,我只是不知道是否可以在PHP中完成。

    4 回复  |  直到 14 年前
        1
  •  14
  •   David Z    14 年前

    is accessible 来自PHP。具体来说,看看 readline_completion_function . 用法相当简单;你打电话来 readline\完成\函数 对于一个参数,一个处理完成的回调函数。回调函数将前几个字母(基本上,在按TAB键之前键入的任何字母)作为输入,并应返回一个可能匹配的数组。

        2
  •  6
  •   c9s    9 年前

    对!你可以用PHP来做这个!

    CLIFramework提供了一个命令来帮助您通过命令定义生成bash完成脚本。

    您还可以在PHP中定义参数完成,生成的bash/zsh完成将在运行时返回PHP的执行结果:

    https://github.com/c9s/CLIFramework

    屏幕广播(bash):

    enter image description here

    屏幕广播(zsh):

    enter image description here

        3
  •  4
  •   borracciaBlu    7 年前

    关于readline\u completion\u函数

    我想说,考虑到你正在寻找的交互类型(apt get autocomplete) 这种方法不好。

    在外壳中:

    ➜  ~ php test.php (enter) 
    Custom command: (tab)
    a b c
    Custom command: (tab)
    a b c
    

    代码是:

    <?php
    // test.php
    class AutoController
    {
    
        private static function getCommandsArray()
        {
            $my_dir = array('a', 'b', 'c');
            return $my_dir;
        }
    
        /**
         * The callback which is returning an array with strings, which will be
         * auto-completed.
         *
         * @param $input
         * @param $index
         * @return array
         */
        private static function completionCallback($input, $index)
        {
            return self::getCommandsArray();
        }
    
        /**
         * The method which is handling the autocompletion. After it's runned, you can
         * autocomplete your commands by hitting the tab-button.
         */
        public function actionCompl()
        {
            readline_completion_function(array('self', 'completionCallback'));
    
            $command_input = readline("Custom command: ");
    
            passthru('echo ' . $command_input);
        }
    }
    
    $a = new AutoController();
    $a->actionCompl();
    

    关于运行时自动完成

    c9s 可以获得这种功能,但是 extending 自动完成bash的功能,而不是用PHP。

    所以,如果你看到 CLIFramework 例如,您将看到:

    BashGenerator.php
    ZshGenerator.php
    

    用于生成bash脚本以扩展bash或zsh autocomplete。

    所以,这取决于你使用的shell,以及你实现自动完成的方式。

    一些参考资料:

        4
  •  3
  •   Ionuț G. Stan    14 年前

    你可以试着用 readline ,更具体地说 readline_completion_function 功能。