我想发送一个for
SSH,但使用反引号
例子 :
ssh $user@$computer "for i in `$command` do; echo $i; done"
问题,它没有按预期工作。如果我这样做
\`$command\`
该命令在远程计算机中被转义,如果没有,它将由本地计算机解释
我也尝试过 EOF,但没有成功
答案1
前者是正常的。反引号,就像 和$variables
一样$(commands)
,总是在双引号字符串内解释。这不是 SSH 的事情;无论你运行什么命令,你的本地 shell 都会应用相同的语法规则。
如果有疑问,请首先尝试使用echo
,您将看到发送到远程服务器的确切字符串:
$ command="id"
$ echo "for i in \`$command\`; do echo \$i; done"
for i in `id`; do echo $i; done
尝试使用 shell(这里是 Bash,但最好与远程服务器运行的 shell 相同):
$ command="id"
$ bash -c "for i in \`$command\`; do echo \$i; done"
uid=1000(grawity)
gid=100(users)
groups=100(users)
现在实际上保证也可以与 SSH 一起使用:
$ command="id"
$ ssh root@somehost "for i in \`$command\`; do echo \$i; done"
uid=0(root)
gid=0(root)
groups=0(root),1(bin),2(daemon)
`$command`
(用替换可能更容易$($command)
,那么只需要转义外面的 $。)