所以我一直在远程服务器上运行本地脚本:
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