summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorTodd Lyons <tlyons@exim.org>2014-07-03 08:32:48 -0700
committerTodd Lyons <tlyons@exim.org>2014-07-03 08:32:48 -0700
commitc13d09b8d3277897243fd25df73718da35cd4e1c (patch)
treecd7c53757c107146322cd7544ab9436d9e7c218a /doc
parent581d7beee57968255234fa6b25b62042152cb826 (diff)
Enhance documentation of ${run command parsing.
Diffstat (limited to 'doc')
-rw-r--r--doc/doc-docbook/spec.xfpt19
-rw-r--r--doc/doc-txt/ChangeLog4
2 files changed, 20 insertions, 3 deletions
diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt
index a1422b09b..795d3a1c1 100644
--- a/doc/doc-docbook/spec.xfpt
+++ b/doc/doc-docbook/spec.xfpt
@@ -9597,11 +9597,24 @@ expansion item above.
{*&<&'string2'&>&*}}*&"
.cindex "expansion" "running a command"
.cindex "&%run%& expansion item"
-The command and its arguments are first expanded separately, and then the
-command is run in a separate process, but under the same uid and gid. As in
-other command executions from Exim, a shell is not used by default. If you want
+.new
+The command and its arguments are first expanded as one string. The string is
+split apart into individual arguments by spaces, and then the command is run
+in a separate process, but under the same uid and gid. As in other command
+executions from Exim, a shell is not used by default. If the command requires
a shell, you must explicitly code it.
+Since the arguments are split by spaces, when there is a variable expansion
+which has an empty result, it will cause the situation that the argument will
+simply be omitted when the program is actually executed by Exim. If the
+script/program requires a specific number of arguments and the expanded
+variable could possibly result in this empty expansion, the variable must be
+quoted. This is more difficult if the expanded variable itself could result
+in a string containing quotes, because it would with the quotes around the
+command arguments. A possible guard against this is to wrap the variable in
+the &%sg%& operator to change any quote marks to some other character.
+.wen
+
The standard input for the command exists, but is empty. The standard output
and standard error are set to the same file descriptor.
.cindex "return code" "from &%run%& expansion"
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
index 40a24430f..83a066331 100644
--- a/doc/doc-txt/ChangeLog
+++ b/doc/doc-txt/ChangeLog
@@ -138,6 +138,10 @@ TF/03 Fix udpsend. The ip_connectedsocket() function's socket type
TL/13 Bug 1495: Exiqgrep check if -C config file specified on cli exists
and is readable. Patch from Andrew Colin Kissa.
+TL/14 Enhance documentation of ${run expansion and how it parses the
+ commandline after expansion, particularly in the case when an
+ unquoted variable expansion results in an empty value.
+
Exim version 4.82
-----------------