forall: Clarify expansion of REPO_ environment values with -c

If a user executes:

  repo forall -c echo $REPO_PROJECT

then $REPO_NAME is expanded by the user's shell first, and passed
as $1 to the shell that executes echo. This will either result in
no output, or output of whatever REPO_NAME is set to in the user's
shell. Either way, this is an unexpected result.

The correct way to do it is:

  repo forall -c 'echo $REPO_PROJECT'

such that $REPO_NAME is passed in to the shell literally, and then
expanded to the value set in the environment that was passed to
the shell.

Update the documentation to make this clearer.

Change-Id: I713caee914172ad8d8f0fafacd27026502436f0d
This commit is contained in:
David Pursehouse 2017-10-31 12:27:17 +09:00
parent c00d28b767
commit f46902a800

View File

@ -104,6 +104,13 @@ annotating tree details.
shell positional arguments ($1, $2, .., $#) are set to any arguments shell positional arguments ($1, $2, .., $#) are set to any arguments
following <command>. following <command>.
Example: to list projects:
%prog% forall -c 'echo $REPO_PROJECT'
Notice that $REPO_PROJECT is quoted to ensure it is expanded in
the context of running <command> instead of in the calling shell.
Unless -p is used, stdin, stdout, stderr are inherited from the Unless -p is used, stdin, stdout, stderr are inherited from the
terminal and are not redirected. terminal and are not redirected.