通过 SSH 执行脚本并获得输出?

Mun*_*esh 4 unix ssh shell sh

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

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

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

提前致谢。

Cha*_*ffy 5

该问题与 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