我正在尝试通过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将控制台连接到机器并执行相同的命令,它会按预期工作。
答案 0 :(得分:2)
您应该使用单引号或转义$
中的$var
。现在$var
在ssh运行之前被取代。
ssh /root/.ssh/id_rsa 'while read var; do echo "- $var -"; done < /tmp/file; cat /tmp/file'
答案 1 :(得分:1)
$var
在ssh
之前展开,因为它在双引号内。如果你传递给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"