Bash/php - 为参数实现tab键自动完成的任何方法?

Har*_*83- 16 php linux bash

我有一个PHP命令行脚本,它将作业启动到作业服务器,作业名称是一个参数.作业名称是命名空间,例如Foo:Bar_Baz_JobName.有没有办法实现自动完成,比如如何键入文件名的前几个字母,然后按tab bash为你完成文件名.我知道它可以完成,因为tab-completion在ubuntu上使用apt-get工作,我只是不知道它是否可以在PHP中完成.

Dav*_*d Z 12

自动完成是使用GNU readline库完成的,显然可以从PHP 访问.具体来说,看看readline_completion_function.用法很简单; 你readline_completion_function用一个参数调用,一个回调函数来处理完成.回调函数将前几个字母(基本上是按TAB之前键入的任何内容)作为输入,并应返回可能匹配的数组.

  • 你能给出一个完整的例子吗?您应该在哪里定义它,以及如何防止执行文件的其余部分? (2认同)

c9s*_*c9s 5

是! 你可以用PHP做到这一点!

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

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

https://github.com/c9s/CLIFramework

截屏(bash):

在此输入图像描述

截屏视频(zsh):

在此输入图像描述


bor*_*Blu 5

关于 readline_completion_function

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

事实上,在获得自动完成功能之前,您必须运行脚本,然后才能访问自动完成功能。

自动完成功能是部分的。所以,它喜欢 bash 自动完成而不是 zsh。

在外壳中:

?  ~ php test.php (enter) 
Custom command: (tab)
a b c
Custom command: (tab)
a b c
Run Code Online (Sandbox Code Playgroud)

代码是:

<?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();
Run Code Online (Sandbox Code Playgroud)

关于运行时自动完成

正如c9s所建议的那样,可以获得这种功能,但extending可以使用 bash 的自动完成功能,而不是 PHP。

因此,例如,如果您看到CLIFramework的自动完成功能,您将看到:

BashGenerator.php
ZshGenerator.php
Run Code Online (Sandbox Code Playgroud)

用于生成 bash 脚本以扩展 bash 或 zsh 自动完成功能。

因此,这取决于您使用的 shell 必须进行自动完成的方式。

一些参考: