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

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

所以我已经在远程服务器上成功运行了本地脚本:

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

答案3

假设脚本在文件 script.sh 中。运行下面这段代码到底有什么问题:

 ssh -T [email protected] <script.sh

这对我有用!

相关内容