I'm trying to do the following:
#!/bin/sh
ssh user@server "echo \"Test \n for newline\""
This displays:
test \n for newline
How do I get the shell to interpret \n
as an actual newline?
I'm trying to do the following:
#!/bin/sh
ssh user@server "echo \"Test \n for newline\""
This displays:
test \n for newline
How do I get the shell to interpret \n
as an actual newline?
Try using the -e
option, e.g., echo -e "Test \n for newline"
.
If your echo
doesn't have a -e
option, then I'd use printf
. It's widely available and it does not have nearly as many variations in it's implementations.
For greater portability, use printf
instead of echo
.
#!/bin/sh
ssh user@server 'printf "Test \n for newline"'
According to the POSIX standard, echo
should process \n
as a newline character. The bash
built-in echo
does not, unless you supply the -e
option.
Just use one of
#!/bin/sh
ssh user@server "echo -e \"Test \n for newline\""
or
#!/bin/sh
ssh user@server 'echo -e "Test \n for newline"'
or
#!/bin/sh
ssh user@server "echo -e 'Test \n for newline'"
or even
#!/bin/sh
ssh user@server "echo 'Test
for newline'"
All of those will display
Test
for newline
(note the trailing space after the first line and the leading space before the second one - I just copied your code)
Before exectuning ssh command update the IFS environment variable with new line character.
IFS='
'
Store the ssh command output to a varaible
CMD_OUTPUT=$(ssh userName@127.0.0.1 'cat /proc/meminfo')
iterate the output per line
for s in $CMD_OUTPUT; do echo "$s"; done