【问题标题】:How to display newline in ssh如何在 ssh 中显示换行符
【发布时间】:2013-06-13 11:25:17
【问题描述】:

我正在尝试执行以下操作:

#!/bin/sh
ssh user@server "echo \"Test \n for newline\""

这显示:

test \n for newline

如何让 shell 将 \n 解释为实际的换行符?

【问题讨论】:

标签: linux shell newline sh


【解决方案1】:

在执行 ssh 命令之前,用换行符更新 IFS 环境变量。

IFS='                                  
'

将 ssh 命令输出存储到变量中

CMD_OUTPUT=$(ssh userName@127.0.0.1 'cat /proc/meminfo')

每行迭代输出

for s in $CMD_OUTPUT; do echo "$s"; done

【讨论】:

    【解决方案2】:

    只需使用其中一个

    #!/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】:

      尝试使用-e 选项,例如echo -e "Test \n for newline"

      如果您的echo 没有-e 选项,那么我会使用printf。它广泛可用,并且在实现上几乎没有那么多变化。

      【讨论】:

      • 这不起作用。手册页上写着-n Do not print the trailing newline character. 这是我唯一的选择。开头的描述确实说,“echo 实用程序将任何指定的操作数写入标准输出,由单个 ( ')` 字符分隔,后跟换行符 (\n')` 字符。”跨度>
      • 如果您的echo 没有-e 选项,那么我会使用printf。它广泛可用,并且在实现上几乎没有那么多变化。
      【解决方案4】:

      为了更好的可移植性,请使用printf 而不是echo

      #!/bin/sh
      ssh user@server 'printf "Test \n for newline"'
      

      根据 POSIX 标准,echo 应将\n 处理为换行符。 bash 内置 echo 不会,除非您提供 -e 选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 2012-02-20
        • 1970-01-01
        • 1970-01-01
        • 2012-11-09
        • 2010-12-25
        相关资源
        最近更新 更多