我试图运行一个SSH命令,将调用远程计算机上的一些脚本,将一些Lua代码写入文件。
我有这个在bash下执行的脚本命令:
ssh bob writelua.sh '{version=1,{["foo"]=17}}'
而writelua.sh
看起来像这样:
echo "return $1" > bar.lua
但最终的结果是, bar.lua
的内容是:
return version=1
我以为单引号阻止了所有的解释。 我如何编辑脚本并转义通过未经处理的原始Lua代码?
单引号会阻止对本地主机的解释。 远程主机看到命令行
writelua.sh {version=1,{["foo"]=17}}
这是受到支撑扩张。 您需要第二组引号,以便将第一组单引号传递给远程主机。
ssh bob writelua.sh "'{version=1,{[\"foo\"]=17}}'"
正如你所看到的,报价开始变得笨拙。 一个更好的解决方案是简单地复制一个脚本包含
writelua.sh '{version=1,{["foo"]=17}}'
到远程主机并远程执行。
使用$'...'
引号的例子:
ssh bob writelua.sh $'{version=1,{[\'foo\']=17}}'
使用heredoc
并避免所有的过度引用 :
ssh -T bob << \EOF writelua.sh '{version=1,{["foo"]=17}}' EOF
这将发送原始脚本到远程主机,它将在远程主机上解释。