【问题标题】:Execute script over SSH and get output? [duplicate]通过 SSH 执行脚本并获取输出? [复制]
【发布时间】:2016-11-03 06:59:41
【问题描述】:

我正在尝试在远程机器上执行命令并获取输出。

我尝试在下面的 shell 脚本中实现,但无法获取内容。

#!/bin/bash

out=$(ssh huser@$source << EOF
while IFS= read -r line
do
echo 'Data : ' $line
done < "data.txt"
EOF
)

echo $out

输出:

Data : Data : Data : 

我可以看到“数据:”被打印了 3 次,因为文件“data.txt”有 3 行文本。

我不能使用 scp 命令直接获取文件,因为我可能需要运行一些命令来代替文本文件。

有人可以帮我找出问题吗?

提前致谢。

【问题讨论】:

  • 如果在每行代码的开头放置四个空格,而不是“>”,它的格式会更好。或者删除 >s 并点击 {} 按钮。
  • 顺便说一句,shellcheck.net 是你的朋友。
  • ...其中大部分是 stackoverflow.com/questions/2374276/… 的重复——其余的只是对 echo 扩展的引用。
  • 谢谢大家的建议。

标签: shell unix ssh sh


【解决方案1】:

这个问题根本与 ssh 无关:

echo $out

正在破坏您的数据。使用引号!

echo "$out"

同样,你需要引用你的heredoc:

out=$(ssh huser@$source <<'EOF'
  while IFS= read -r line; do
    printf 'Data : %s\n' "$line"
  done < "data.txt"
EOF
)

使用&lt;&lt;'EOF' 代替&lt;&lt;EOF 可防止$line 在本地扩展,之前代码已通过SSH 发送;此本地扩展将 echo 'Data : ' $line 替换为 echo 'Data : ',因为在您的本地系统上,line 变量未设置。

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多