diff options
author | 諏訪子 <suwako@076.moe> | 2024-06-21 21:34:05 +0900 |
---|---|---|
committer | 諏訪子 <suwako@076.moe> | 2024-06-21 21:34:05 +0900 |
commit | 0556b433bf6f58d837dae4b74ddea25260ca64c8 (patch) | |
tree | c5fe19242fe0c4d70484dbdd159ef9faaefbc852 /src/shell.c | |
parent | 1b4a5a6bc4712468b4b5bfedc584f0e03728fe11 (diff) |
シェル情報の追加
Diffstat (limited to 'src/shell.c')
-rw-r--r-- | src/shell.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/shell.c b/src/shell.c new file mode 100644 index 0000000..783ed98 --- /dev/null +++ b/src/shell.c @@ -0,0 +1,42 @@ +#include "shell.h" +#include "common.h" + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +const char *display_shell() { + char *shell = (char *)malloc(64 * sizeof(char)); + if (shell == NULL) { + return NULL; + } + + const char *ver; + const char *name = run_command_s("echo ${SHELL##*/}"); + + if (strncmp(name, "bash", strlen("bash")) == 0) { + ver = run_command_s("echo $BASH_VERSION"); + } else if (strncmp(name, "ksh", strlen("ksh")) == 0) { + ver = run_command_s("echo $KSH_VERSION | sed 's/^.*v//' | sed 's/ .*$//'"); + } else if (strncmp(name, "zsh", strlen("zsh")) == 0) { + ver = run_command_s("zsh --version | sed 's/ (.*$//' | sed 's/zsh //'"); + } else if (strncmp(name, "yash", strlen("yash")) == 0) { + ver = run_command_s("LC_ALL=C yash --version | head -1 | " + "sed 's/Yet another shell, version //'"); + } else if (strncmp(name, "tsch", strlen("tsch")) == 0) { + ver = run_command_s("tcsh --version | sed 's/tcsh //' | sed 's/ .*$//'"); + } else { + ver = NULL; + } + + if (ver != NULL) { + snprintf(shell, sizeof(shell), "%s %s", name, ver); + } else { + snprintf(shell, sizeof(shell), "%s", name); + } + + free((void *)name); + if (ver != NULL) free((void *)ver); + + return shell; +} |