我正在尝试执行以下操作:
#!/bin/sh
ssh user@server "echo \"Test \n for newline\""
显示:
test \n for newline
如何让shell将\n
解释为实际换行符?
答案 0 :(得分:4)
尝试使用-e
选项,例如echo -e "Test \n for newline"
。
如果您的echo
没有-e
选项,那么我会使用printf
。它广泛使用,并且它的实现中几乎没有变化。
答案 1 :(得分:2)
为了获得更好的便携性,请使用printf
代替echo
。
#!/bin/sh
ssh user@server 'printf "Test \n for newline"'
根据POSIX标准,echo
应将\n
作为换行符处理。除非您提供bash
选项,否则echo
内置-e
不会。
答案 2 :(得分:1)
只需使用其中一个
#!/bin/sh
ssh user@server "echo -e \"Test \n for newline\""
或
#!/bin/sh
ssh user@server 'echo -e "Test \n for newline"'
或
#!/bin/sh
ssh user@server "echo -e 'Test \n for newline'"
甚至
#!/bin/sh
ssh user@server "echo 'Test
for newline'"
所有这些都会显示出来
Test
for newline
(注意第一行之后的尾随空格和第二行之前的前导空格 - 我只是复制了你的代码)
答案 3 :(得分:0)
在执行ssh命令之前,使用换行符更新IFS环境变量。
IFS='
'
将ssh命令输出存储到可变的
CMD_OUTPUT=$(ssh userName@127.0.0.1 'cat /proc/meminfo')
迭代每行的输出
for s in $CMD_OUTPUT; do echo "$s"; done