d018734c0c
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>
44 lines
686 B
C
44 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"
|
|
);
|