通过ssh远程读取读取行时不会填充读取变量

时间:2016-04-02 14:01:10

标签: bash ssh while-loop

我正在尝试通过ssh远程处理一个读取行循环,其中包含以下内容:

ssh /root/.ssh/id_rsa "while read var; do echo \"- $var -\"; done < /tmp/file; cat /tmp/file"

/ tmp / file远程存在。命令输出应为:

- /tmp -
- /var -
/tmp
/var

但输出实际上是:

- -
- -
/tmp
/var

为什么远程执行时$ var不会被填充? 如果我碰巧通过ssh将控制台连接到机器并执行相同的命令,它会按预期工作。

2 个答案:

答案 0 :(得分:2)

您应该使用单引号或转义$中的$var。现在$var在ssh运行之前被取代。

ssh /root/.ssh/id_rsa 'while read var; do echo "- $var -"; done < /tmp/file; cat /tmp/file'

答案 1 :(得分:1)

$varssh之前展开,因为它在双引号内。如果你传递给ssh的命令是单引号,它将不会被扩展,或者如果你逃脱$你应该被设置:

ssh /root/.ssh/id_rsa 'while read var; do echo "- $var -"; done < /tmp/file; cat /tmp/file'

ssh /root/.ssh/id_rsa "while read var; do echo \"- \$var -\"; done < /tmp/file; cat /tmp/file"