Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: a way to get the value of the -c option



On Thu, 03 Dec 2015 13:49:29 +0000
Stephane Chazelas <stephane.chazelas@xxxxxxxxx> wrote:
> Note that bash calls it $BASH_EXECUTION_STRING
> 
> It could be useful to have zsh's equivalent being
> $ZSH_EXECUTION_STRING.

Strikes me as a bit wordy and non-specific, but it would probably help
to be similar...

pws

diff --git a/Doc/Zsh/params.yo b/Doc/Zsh/params.yo
index 21bb874..6722092 100644
--- a/Doc/Zsh/params.yo
+++ b/Doc/Zsh/params.yo
@@ -933,6 +933,11 @@ tt(zsh/zutil) module.
 )
 enditem()
 )
+vindex(ZSH_EXECUTION_STRING)
+item(tt(ZSH_EXECUTION_STRING))(
+If the shell was started with the option tt(-c), this contains
+the argument passed to the option.  Otherwise it is not set.
+)
 vindex(ZSH_NAME)
 item(tt(ZSH_NAME))(
 Expands to the basename of the command used to invoke this instance
diff --git a/Src/init.c b/Src/init.c
index dcce1d7..7894893 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -240,13 +240,11 @@ loop(int toplevel, int justonce)
     return LOOP_OK;
 }
 
-/* Shared among parseargs(), parseopts(), init_io(), and init_misc() */
-static char *cmd;
 static int restricted;
 
 /**/
 static void
-parseargs(char **argv, char **runscript)
+parseargs(char **argv, char **runscript, char **cmdptr)
 {
     char **x;
     LinkList paramlist;
@@ -272,7 +270,7 @@ parseargs(char **argv, char **runscript)
     opts[SHINSTDIN] = 0;
     opts[SINGLECOMMAND] = 0;
 
-    if (parseopts(NULL, &argv, opts, &cmd, NULL))
+    if (parseopts(NULL, &argv, opts, cmdptr, NULL))
 	exit(1);
 
     /*
@@ -290,7 +288,7 @@ parseargs(char **argv, char **runscript)
     if (*argv) {
 	if (unset(SHINSTDIN)) {
 	    posixzero = *argv;
-	    if (cmd)
+	    if (*cmdptr)
 		argzero = *argv;
 	    else
 		*runscript = *argv;
@@ -299,7 +297,7 @@ parseargs(char **argv, char **runscript)
 	}
 	while (*argv)
 	    zaddlinknode(paramlist, ztrdup(*argv++));
-    } else if (!cmd)
+    } else if (!*cmdptr)
 	opts[SHINSTDIN] = 1;
     if(isset(SINGLECOMMAND))
 	opts[INTERACTIVE] &= 1;
@@ -497,7 +495,7 @@ printhelp(void)
 
 /**/
 mod_export void
-init_io(void)
+init_io(char *cmd)
 {
     static char outbuf[BUFSIZ], errbuf[BUFSIZ];
 
@@ -802,7 +800,7 @@ init_term(void)
 
 /**/
 void
-setupvals(void)
+setupvals(char *cmd)
 {
 #ifdef USE_GETPWUID
     struct passwd *pswd;
@@ -1086,6 +1084,9 @@ setupvals(void)
 
     /* Colour sequences for outputting colours in prompts and zle */
     set_default_colour_sequences();
+
+    if (cmd)
+	setsparam("ZSH_EXECUTION_STRING", ztrdup(cmd));
 }
 
 /*
@@ -1267,7 +1268,7 @@ run_init_scripts(void)
 
 /**/
 void
-init_misc(void)
+init_misc(char *cmd)
 {
 #ifndef RESTRICTED_R
     if ( restricted )
@@ -1604,6 +1605,7 @@ mod_export int
 zsh_main(UNUSED(int argc), char **argv)
 {
     char **t, *runscript = NULL;
+    char *cmd;			/* argument to -c */
     int t0;
 #ifdef USE_LOCALE
     setlocale(LC_ALL, "");
@@ -1652,18 +1654,18 @@ zsh_main(UNUSED(int argc), char **argv)
     opts[LOGINSHELL] = (**argv == '-');
     opts[PRIVILEGED] = (getuid() != geteuid() || getgid() != getegid());
     /* sets ZLE, INTERACTIVE, SHINSTDIN and SINGLECOMMAND */
-    parseargs(argv, &runscript);
+    parseargs(argv, &runscript, &cmd);
 
     SHTTY = -1;
-    init_io();
-    setupvals();
+    init_io(cmd);
+    setupvals(cmd);
 
     init_signals();
     init_bltinmods();
     init_builtins();
     run_init_scripts();
     setupshin(runscript);
-    init_misc();
+    init_misc(cmd);
 
     for (;;) {
 	/*



Messages sorted by: Reverse Date, Date, Thread, Author