使用ssh在远程服务器上运行本地脚本,而不必担心引号

所以我一直在远程服务器上运行本地脚本:

ssh user@server "`cat local-script.sh`" 

但是,今天我有一个既有单引号又有双引号的脚本。 这导致脚本失败,因为cat local-script.sh的输出用引号括起来。 无需修改脚本本身,是否有更好的方法来处理?

我认为这可能工作:

 ssh user@server $(<local-script.sh) 

但似乎并没有做任何事情…

通过以下testing脚本:

 #!/bin/bash uname -n a=(bc 'de' f) echo "${#a[@]}" b=(1 "2 3" 4) echo "${#b[@]}" 

当使用以下命令执行时,输出应该是远程主机名,后跟4和3:

 ssh user@server "$(<scriptname)" 

这显示脚本内的引号正在正确处理。 如果报价没有正确处理,由于分词,数字输出将是5和4。 请注意围绕命令replace的引号。

顺便说一下,你发布的第一个命令不起作用。 单引号可防止反引号在本地进行评估。

 cat local-script.sh | ssh user@server bash 

或者任何你想使用的shell而不是bash

假定脚本在文件script.sh中。 运行的问题是什么?

  ssh -T [email protected] <script.sh 

这对我有用!