I just noticed that it seems like the flag -e does not exist for the echo command in my shell on Linux.
Is this just a messed up setting or is it “normal”?
Some code as an example:
#!/bin/sh echo -e "e[3;12re[3H"
Prints:
-e e[3;12re[3H
This worked before! I guess some stty commands went terribly wrong and now it does not work anymore. Somebody suggested that my sh was actually just bash.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Because you used sh, not bash, then echo command in sh doesn’t have option -e. From sh manpage:
echo [-n] args...
Print the arguments on the standard output, separated by spaces.
Unless the -n option is present, a newline is output following the
arguments.
And it doesn’t have e, too:
If any of the following sequences of characters is encountered
during output, the sequence is not output. Instead, the specified
action is performed:
b A backspace character is output.
c Subsequent output is suppressed. This is normally used at
the end of the last argument to suppress the trailing new‐
line that echo would otherwise output.
f Output a form feed.
n Output a newline character.
r Output a carriage return.
t Output a (horizontal) tab character.
v Output a vertical tab.
digits
Output the character whose value is given by zero to three
octal digits. If there are zero digits, a nul character
is output.
\ Output a backslash.
All other backslash sequences elicit undefined behaviour.
Method 2
-e is not POSIX (in fact, POSIX echo generally accepts no options, though it is allowed to support -n, see here), and /bin/sh on your system appears to be a POSIX shell. -e is an extension accepted in some shells, but you shouldn’t rely on it, it’s not portable. Ideally, use printf, or switch to using a shell which has echo -e.
Also see the caveats of e in the comments below, which should be replaced with 33.
printf '33[3;12r33[3H'
Method 3
Note that at any time and in almost any shell, you can figure out which “echo” will be called by typing type echo or which echo. It’s usually a shell builtin. So it depends on which “echo” is installed and on which shell you’re using.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0