X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/185cabda4524efc03c767243fb90083708a4aeeb..a5639e7dd9a1664c2bee87a51e775a5f73c64ffa:/src/redis-cli.c diff --git a/src/redis-cli.c b/src/redis-cli.c index 1d00fb87..4dafba32 100644 --- a/src/redis-cli.c +++ b/src/redis-cli.c @@ -52,6 +52,7 @@ static struct config { char *hostip; int hostport; + char *hostsocket; long repeat; int dbnum; int argn_from_stdin; @@ -61,6 +62,7 @@ static struct config { int pubsub_mode; int raw_output; char *auth; + char *historyfile; } config; static int cliReadReply(int fd); @@ -71,9 +73,21 @@ static int cliConnect(void) { static int fd = ANET_ERR; if (fd == ANET_ERR) { - fd = anetTcpConnect(err,config.hostip,config.hostport); + if (config.hostsocket == NULL) { + fd = anetTcpConnect(err,config.hostip,config.hostport); + } else { + fd = anetUnixConnect(err,config.hostsocket); + if (fd == ANET_ERR) { + fprintf(stderr, "Could not connect to Redis at %s: %s", config.hostsocket, err); + return -1; + } + } if (fd == ANET_ERR) { - fprintf(stderr, "Could not connect to Redis at %s:%d: %s", config.hostip, config.hostport, err); + fprintf(stderr,"Could not connect to Redis at "); + if (config.hostsocket == NULL) + fprintf(stderr,"%s:%d: %s",config.hostip,config.hostport,err); + else + fprintf(stderr,"%s: %s",config.hostsocket,err); return -1; } anetTcpNoDelay(NULL,fd); @@ -303,6 +317,9 @@ static int parseOptions(int argc, char **argv) { } else if (!strcmp(argv[i],"-p") && !lastarg) { config.hostport = atoi(argv[i+1]); i++; + } else if (!strcmp(argv[i],"-s") && !lastarg) { + config.hostsocket = argv[i+1]; + i++; } else if (!strcmp(argv[i],"-r") && !lastarg) { config.repeat = strtoll(argv[i+1],NULL,10); i++; @@ -344,8 +361,8 @@ static sds readArgFromStdin(void) { } static void usage() { - fprintf(stderr, "usage: redis-cli [-iv] [-h host] [-p port] [-a authpw] [-r repeat_times] [-n db_num] cmd arg1 arg2 arg3 ... argN\n"); - fprintf(stderr, "usage: echo \"argN\" | redis-cli -c [-h host] [-p port] [-a authpw] [-r repeat_times] [-n db_num] cmd arg1 arg2 ... arg(N-1)\n"); + fprintf(stderr, "usage: redis-cli [-iv] [-h host] [-p port] [-s /path/to/socket] [-a authpw] [-r repeat_times] [-n db_num] cmd arg1 arg2 arg3 ... argN\n"); + fprintf(stderr, "usage: echo \"argN\" | redis-cli -c [-h host] [-p port] [-s /path/to/socket] [-a authpw] [-r repeat_times] [-n db_num] cmd arg1 arg2 ... arg(N-1)\n"); fprintf(stderr, "\nIf a pipe from standard input is detected this data is used as last argument.\n\n"); fprintf(stderr, "example: cat /etc/passwd | redis-cli set my_passwd\n"); fprintf(stderr, "example: redis-cli get my_passwd\n"); @@ -439,6 +456,7 @@ static void repl() { if (line[0] != '\0') { argv = splitArguments(line,&argc); linenoiseHistoryAdd(line); + if (config.historyfile) linenoiseHistorySave(config.historyfile); if (argc > 0) { if (strcasecmp(argv[0],"quit") == 0 || strcasecmp(argv[0],"exit") == 0) @@ -463,6 +481,7 @@ int main(int argc, char **argv) { config.hostip = "127.0.0.1"; config.hostport = 6379; + config.hostsocket = NULL; config.repeat = 1; config.dbnum = 0; config.argn_from_stdin = 0; @@ -472,6 +491,13 @@ int main(int argc, char **argv) { config.pubsub_mode = 0; config.raw_output = 0; config.auth = NULL; + config.historyfile = NULL; + + if (getenv("HOME") != NULL) { + config.historyfile = malloc(256); + snprintf(config.historyfile,256,"%s/.rediscli_history",getenv("HOME")); + linenoiseHistoryLoad(config.historyfile); + } firstarg = parseOptions(argc,argv); argc -= firstarg;