u-boot/cmd/echo.c
Heinrich Schuchardt d018734c0c cmd: change suppress newline in echo command
By default the echo command emits its arguments followed by a line feed.

If any of the arguments contains the sub-string "\c", the line feed is
suppressed.

This does not match shells used in Linux and BSD where the first argument
has to be -n to suppress the line feed.

The hush shell interferes with the parsing of backslashes. E.g. in the
following command line quadruple backslashes are required for suppressing
the line feed:

for i in 1 2 3; do for j in 4 5; do echo \\\\c ${i}${j}; done; echo; done;

To avoid unexpected behavior the patch changes echo to use -n as first
argument to suppress the line feed.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
2021-01-25 01:15:33 +01:00

43 lines
686 B
C

// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright 2000-2009
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*/
#include <common.h>
#include <command.h>
static int do_echo(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
int i = 1;
bool space = false;
bool newline = true;
if (argc > 1) {
if (!strcmp(argv[1], "-n")) {
newline = false;
++i;
}
}
for (; i < argc; ++i) {
if (space) {
putc(' ');
}
puts(argv[i]);
space = true;
}
if (newline)
putc('\n');
return 0;
}
U_BOOT_CMD(
echo, CONFIG_SYS_MAXARGS, 1, do_echo,
"echo args to console",
"[-n] [args..]\n"
" - echo args to console; -n suppresses newline"
);