bluetoothctl 在哪里存储命令历史记录?

bluetoothctl 在哪里存储命令历史记录?

man bluetoothctlinfo bluetoothctl和中没有任何关于命令历史记录的内容bluetoothctl --help

答案1

简短回答

bluetoothctl将命令历史记录存储在~/.cache/.bluetoothctl_history.


长答案

免责声明:长答案需要对编程语言 C 有一定的了解。

bluetoothctl是一个命令行工具,附带BlueZ – 适用于 Linux 的蓝牙协议栈。如果我们看一下 BlueZ 的源代码:

我们很快就会意识到正在bluetoothctl使用GNU Readline 库其交互式外壳。每Readline 的文档, 函数write_history可用于将历史记录写入文件。如果我们只是在 BlueZ 源代码中 grep 查找该函数的名称:

$ grep write_history -r
src/shared/shell.c:             write_history(data.history);

命令的历史记录被写入一个文件中,该文件bluetoothctl的名称保存在.然后,只需 grep 访问该字段,我们就会找到它的初始化位置:.historystruct data

static void rl_init_history(void)
{
        const char *name;
        char *dir;

        memset(data.history, 0, sizeof(data.history));

        name = strrchr(data.name, '/');
        if (!name)
                name = data.name;
        else
                name++;

        dir = getenv("XDG_CACHE_HOME");
        if (dir) {
                snprintf(data.history, sizeof(data.history), "%s/.%s_history",
                                                        dir, name);
                goto done;
        }

        dir = getenv("HOME");
        if (dir) {
                snprintf(data.history, sizeof(data.history),
                                "%s/.cache/.%s_history", dir, name);
                goto done;
        }

        dir = getenv("PWD");
        if (dir) {
                snprintf(data.history, sizeof(data.history), "%s/.%s_history",
                                                        dir, name);
                goto done;
        }

        return;

done:
        read_history(data.history);
        using_history();
        bt_shell_set_env("HISTORY", data.history);
}

这里,XDG_CACHE_HOME来自freedesktop.org 规范。其他环境变量是 basic$HOME$PWD.字段data.name设置在其他地方:

void bt_shell_init(int argc, char **argv, const struct bt_shell_opt *opt)
{
...
    data.name = strrchr(argv[0], '/');
    if (!data.name)
        data.name = strdup(argv[0]);
    else
        data.name = strdup(++data.name);
...
}

因此char *name函数中的变量将包含可执行文件的名称rl_init_history字符串。bluetoothctlargvC中的描述

因此,在大多数遵循 freedesktop.org 规范的桌面环境中,命令行工具bluetoothctl会将命令的历史记录存储在文件中~/.cache/.bluetoothctl_history。如果定义了环境变量XDG_CACHE_HOME,则命令的历史记录将存储在$XDG_CACHE_HOME/.bluetoothctl_history.

相关内容