summary refs log tree commit diff
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@gmail.com>2022-03-08 19:34:20 +0100
committerMikael Magnusson <mikachu@gmail.com>2022-03-30 08:07:39 +0200
commitd7b8619396d806d390126c2abd1c3ce099fe7f59 (patch)
tree69d35674d1901f992dc33187e6ce9a010908b863
parent3bf95b91f0cd378c1a4e9c611a51cb9fe0e2ffcd (diff)
downloadzsh-d7b8619396d806d390126c2abd1c3ce099fe7f59.tar.gz
zsh-d7b8619396d806d390126c2abd1c3ce099fe7f59.tar.xz
zsh-d7b8619396d806d390126c2abd1c3ce099fe7f59.zip
49813: <<<: Document newline behavior and fix optimization
The =(<<<foo) optimization forgot to add a newline, but =(cat<<<foo)
always did, make the behavior consistent, and document it.
-rw-r--r--ChangeLog3
-rw-r--r--Doc/Zsh/redirect.yo3
-rw-r--r--Src/exec.c4
3 files changed, 8 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 3b7cc4921..a525d2093 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -15,6 +15,9 @@
 
 	* 49870: Src/glob.c: Fix NULL reference in match code more
 
+	* 49813: Doc/Zsh/redirect.yo, Src/exec.c: <<<: Document newline
+	behavior and fix optimization
+
 2022-03-29  Bart Schaefer  <schaefer@zsh.org>
 
 	* 49918: NEWS, README: Update for 49917 and 49911.
diff --git a/Doc/Zsh/redirect.yo b/Doc/Zsh/redirect.yo
index 2b48974b4..fd40ab5a4 100644
--- a/Doc/Zsh/redirect.yo
+++ b/Doc/Zsh/redirect.yo
@@ -86,7 +86,8 @@ item(tt(<<<) var(word))(
 Perform shell expansion on var(word) and pass the result
 to standard input.  This is known as a em(here-string).
 Compare the use of var(word) in here-documents above, where var(word)
-does not undergo shell expansion.
+does not undergo shell expansion.  The result will have a trailing newline
+after it.
 )
 xitem(tt(<&) var(number))
 item(tt(>&) var(number))(
diff --git a/Src/exec.c b/Src/exec.c
index f67074846..70cbfc97f 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -4836,8 +4836,10 @@ getoutputfile(char *cmd, char **eptr)
 	singsub(&s);
 	if (errflag)
 	    s = NULL;
-	else
+	else {
 	    untokenize(s);
+	    s = dyncat(s, "\n");
+	}
     }
 
     if (!s)             /* Unclear why we need to do this before open() */