summary refs log tree commit diff
diff options
context:
space:
mode:
authorTeubel György <tgyurci@gmail.com>2016-09-03 23:06:30 +0200
committerPeter Stephenson <p.w.stephenson@ntlworld.com>2016-09-05 21:03:12 +0100
commitfde365ea8ba91a4e7daa27dfd63fdadb55a882f5 (patch)
tree2fcced596ce2e94c0e2ede4fb9bff5f16b6ed2f9
parent02bb3de2575aca2b0e823b96d8281c89a77eba42 (diff)
downloadzsh-fde365ea8ba91a4e7daa27dfd63fdadb55a882f5.tar.gz
zsh-fde365ea8ba91a4e7daa27dfd63fdadb55a882f5.tar.xz
zsh-fde365ea8ba91a4e7daa27dfd63fdadb55a882f5.zip
39167: Make $ENV handling more like POSIX
-rw-r--r--ChangeLog5
-rw-r--r--Doc/Zsh/params.yo3
-rw-r--r--Src/init.c25
3 files changed, 21 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index b6f4836d7..f5d18990a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-09-05  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* Teubel György: 39167: Src/init.c, Doc/Zsh/params.yo: Make $ENV
+	more like POSIX.
+
 2016-09-04  Daniel Shahaf  <d.s@daniel.shahaf.name>
 
 	* unposted: Src/Zle/comp.h, Src/Zle/complete.c: internals:
diff --git a/Doc/Zsh/params.yo b/Doc/Zsh/params.yo
index 55930ed7b..03625ce24 100644
--- a/Doc/Zsh/params.yo
+++ b/Doc/Zsh/params.yo
@@ -1059,7 +1059,8 @@ If the tt(ENV) environment variable is set when zsh is invoked as tt(sh)
 or tt(ksh), tt($ENV) is sourced after the profile scripts.  The value of
 tt(ENV) is subjected to parameter expansion, command substitution, and
 arithmetic expansion before being interpreted as a pathname.  Note that
-tt(ENV) is em(not) used unless zsh is emulating bf(sh) or bf(ksh).
+tt(ENV) is em(not) used unless the shell is interactive and zsh is
+emulating bf(sh) or bf(ksh).
 )
 vindex(FCEDIT)
 item(tt(FCEDIT))(
diff --git a/Src/init.c b/Src/init.c
index 20a07eb0a..3dea179b9 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -712,7 +712,7 @@ init_term(void)
     if (tgetent(termbuf, term) != TGETENT_SUCCESS)
 #endif
     {
-	if (isset(INTERACTIVE))
+	if (interact)
 	    zerr("can't find terminal definition for %s", term);
 	errflag &= ~ERRFLAG_ERROR;
 	termflags |= TERM_BAD;
@@ -1205,19 +1205,22 @@ run_init_scripts(void)
 	if (islogin)
 	    source("/etc/profile");
 	if (unset(PRIVILEGED)) {
-	    char *s = getsparam("ENV");
 	    if (islogin)
 		sourcehome(".profile");
-	    noerrs = 2;
-	    if (s) {
-		s = dupstring(s);
-		if (!parsestr(&s)) {
-		    singsub(&s);
-		    noerrs = 0;
-		    source(s);
+
+	    if (interact) {
+		noerrs = 2;
+		char *s = getsparam("ENV");
+		if (s) {
+		    s = dupstring(s);
+		    if (!parsestr(&s)) {
+			singsub(&s);
+			noerrs = 0;
+			source(s);
+		    }
 		}
+		noerrs = 0;
 	    }
-	    noerrs = 0;
 	} else
 	    source("/etc/suid_profile");
     } else {
@@ -1227,7 +1230,7 @@ run_init_scripts(void)
 
 	if (isset(RCS) && unset(PRIVILEGED))
 	{
-	    if (isset(INTERACTIVE)) {
+	    if (interact) {
 		/*
 		 * Always attempt to load the newuser module to perform
 		 * checks for new zsh users.  Don't care if we can't load it.