我正在尝试在远程机器上执行命令并获取输出。
我尝试在 shell 脚本下实现,但无法获取内容。
#!/bin/bash
out=$(ssh huser@$source << EOF
while IFS= read -r line
do
echo 'Data : ' $line
done < "data.txt"
EOF
)
echo $out
Run Code Online (Sandbox Code Playgroud)
Data : Data : Data :
Run Code Online (Sandbox Code Playgroud)
我可以看到“数据:”被打印了 3 次,因为文件“data.txt”有 3 行文本。
我不能使用 scp 命令直接获取文件,因为我可能必须在文本文件的位置运行一些命令。
有人可以帮我找到问题吗?
提前致谢。
该问题与 ssh 根本没有任何关系:
echo $out
Run Code Online (Sandbox Code Playgroud)
正在处理您的数据。使用引号!
echo "$out"
Run Code Online (Sandbox Code Playgroud)
同样,您需要引用您的 heredoc:
out=$(ssh huser@$source <<'EOF'
while IFS= read -r line; do
printf 'Data : %s\n' "$line"
done < "data.txt"
EOF
)
Run Code Online (Sandbox Code Playgroud)
在通过 SSH 发送代码之前,使用<<'EOF'而不是<<EOF阻止$line在本地扩展;此本地扩展被替换为,因为在您的本地系统上,该变量未设置。echo 'Data : ' $lineecho 'Data : 'line