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