bash shell - ssh远程执行命令并获取输出?

时间:2016-07-01 01:27:33

标签: shell unix ssh sh

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

我尝试在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命令直接获取文件,因为我可能需要在文本文件的位置运行一些命令。

有人可以帮助我找到问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)

这个问题与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
)

使用<<'EOF'代替<<EOF会阻止$line在本地展开,之前代码已通过SSH发送;此本地扩展正在将echo 'Data : ' $line替换为echo 'Data : ',因为在您的本地系统中,line变量未设置。