SSH 上的反引号

SSH 上的反引号

我想发送一个forSSH,但使用反引号

例子 :

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),那么只需要转义外面的 $。)

相关内容