所以我已经在远程服务器上成功运行了本地脚本:
ssh user@server "`cat local-script.sh`"
但是,今天我有一个脚本,里面既有单引号,也有双引号。这导致脚本失败,因为 的输出cat local-script.sh
被括在引号中。如果不修改脚本本身,有没有更好的方法来处理这个问题?
我认为这可能有效:
ssh user@server $(<local-script.sh)
但似乎什么也没做......
答案1
使用以下测试脚本:
#!/bin/bash
uname -n
a=(b c 'd e' f)
echo "${#a[@]}"
b=(1 "2 3" 4)
echo "${#b[@]}"
使用以下命令执行时,输出应为远程主机名,后跟 4 和 3:
ssh user@server "$(<scriptname)"
这表明脚本中的引号得到了正确处理。如果引号处理不正确,则由于分词,输出的数字将为 5 和 4。请注意命令替换周围的引号。
顺便说一句,您发布的第一个命令不起作用。单引号阻止反引号在本地进行评估。
答案2
cat local-script.sh | ssh user@server bash
或者你想使用的任何 shell 来代替 bash