我正在尝试在远程计算机上执行命令并获取输出。
我尝试在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命令直接获取文件,因为我可能需要在文本文件的位置运行一些命令。
有人可以帮助我找到问题吗?
提前致谢。
答案 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
变量未设置。