首页 > 解决方案 > Bash脚本远程执行sed命令

问题描述

我试图在远程机器上执行下面的脚本,但是在执行 sed 命令时输出没有添加 '\n'。但是,如果我在其正常工作之外执行相同的 sed 命令。我尝试在 sed 命令中添加 \$ ,而不是在输出中添加 \n 。有什么想法吗 ?


set -e
set -o pipefail

ssh "$host" << EOF

  temp_working_dir=/tmp/working_dir
  mycert_path=\${temp_working_dir}/mycert/

  cert=\$(cat "\${mycert_path}"/cert.pem | sed 's/$/\\n/' | tr -d '\n')

  echo "\$cert" > /tmp/cert
 
EOF

标签: bashsed

解决方案


逃跑是很累的。

您的 sed 脚本还需要一个转义反斜杠:'s/$/\\n/g'

set -e
set -o pipefail

ssh "${host}" << EOF

    temp_working_dir=/tmp/working_dir
    mycert_path=\${temp_working_dir}/mycert

    cert=\$(sed 's/$/\\\n/g' "\${mycert_path}/cert.pem" | tr -d '\n')

    echo "\$cert" > /tmp/cert
EOF

推荐阅读