This series adds support for command substitution using $(). The motivation for this is that we have many commands which have a version which prints some information, and one which sets an environmental variable with that info. This is a bit clunky, since every time someone wants to grab info from a command (e.g. [1], [2]), they have to add a version which sets a variable. Every command also has subtle differences in the syntax of how the environmental is specified.
The classic way to do this is to redirect the output of the command into a variable using command substitution. Unfortunately, this approach will not work in U-Boot for a few reasons. First, we don't have any jobs, so we can't use pipelines to filter output. In addition, the command output tends to be very "human-oriented" and would be hard to parse, even if something like console recording were used. Instead, commands just set gd->cmd_result. This result is then printed by the caller of cmd_process. Unfortunately, this means that to support command substitution, commands must be modified to set cmd_result. However, they already would have needed modification to support setting an environmental variable. Printing out the result of the command may not be the best approach here. If a command which prints out many messages already returns a result, just printing the result on its own does not clearly convey what the result means. Perhaps a prefix should be added to printed results? Though this would require echo to be changed. This initial series just converts two commands: echo and part uuid. This showcases the manner in which this new functionality could be implemented. I think that some helper functions like for env may be useful so that commands don't have to do some much bookkeeping (like in the current echo command). This series depends on [3]. [1] https://patchwork.ozlabs.org/project/uboot/patch/20210226181733.19307-1-farhan....@broadcom.com/ [2] https://patchwork.ozlabs.org/project/uboot/patch/20201215165439.13165-1-m.szyprow...@samsung.com/ [3] https://patchwork.ozlabs.org/project/uboot/patch/20210228212951.1175231-1-sean...@gmail.com/ Sean Anderson (5): hush: Print syntax error line with DEBUG_SHELL cmd: Add support for (limited) command substitution cmd: Convert echo to use cmd_result test: hush: Add test for command substitution cmd: Convert part uuid to use cmd_result cmd/echo.c | 33 +++++++++++++++---- cmd/part.c | 18 ++++++++--- common/cli_hush.c | 53 +++++++++++++++++++++++++------ common/cli_simple.c | 8 ++++- common/command.c | 3 ++ include/asm-generic/global_data.h | 4 +++ test/cmd/test_echo.c | 10 +++++- 7 files changed, 107 insertions(+), 22 deletions(-) -- 2.30.1