bluetoothctl은 명령 기록을 어디에 저장합니까?

bluetoothctl은 명령 기록을 어디에 저장합니까?

man bluetoothctl, info bluetoothctl그리고 명령 기록에 대해서는 아무것도 없습니다 bluetoothctl --help.

답변1

짧은 답변

bluetoothctl명령 기록을 ~/.cache/.bluetoothctl_history.


긴 대답

면책 조항: 긴 답변에는 프로그래밍 언어 C에 대한 지식이 필요합니다.

bluetoothctl다음과 함께 제공되는 명령줄 도구입니다.BlueZ – Linux용 Bluetooth 스택. BlueZ의 소스 코드를 살펴보면 다음과 같습니다.

우리는 곧 다음을 bluetoothctl사용하여 깨닫게 될 것입니다.GNU Readline 라이브러리대화형 쉘입니다. 모든Readline의 문서, 함수를 write_history사용하여 파일에 기록을 쓸 수 있습니다. BlueZ 소스 코드를 grep하여 함수 이름을 찾으면 다음과 같습니다.

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

명령 내역은 bluetoothctl이름이 에 저장된 파일에 기록됩니다. 그런 다음 필드를 간단히 검색하면 초기화된 위치를 찾을 수 있습니다..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 사양. 다른 환경 변수는 기본 $HOME이며 $PWD.fields 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실행 파일의 이름 문자열이 포함됩니다. bluetoothctl바라보다argvC에서의 설명.

따라서 freedesktop.org 사양을 따르는 대부분의 데스크탑 환경에서 명령줄 도구는 bluetoothctl명령 기록을 파일에 저장합니다 ~/.cache/.bluetoothctl_history. 환경 변수가 정의되면 XDG_CACHE_HOME명령 기록이 에 저장됩니다 $XDG_CACHE_HOME/.bluetoothctl_history.

관련 정보