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

Modified on: Thu, 17 Oct 2019 18:00:02 +0800

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

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

但是,今天我有一个脚本,其中包含单引号和双引号。这导致脚本失败,因为cat local-script.sh的输出包含在引号中。如果不修改脚本本身,有没有更好的方法来处理它?

我认为这可行:

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

但似乎没有做任何事......

作者:,Michael Irey

最佳答案

使用以下测试脚本:

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

输出应该是远程主机名,后跟4和3时使用:

执行

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

这表明正在正确处理脚本中的引号。如果没有正确处理引号,由于分词,数字输出将为5和4。请注意命令替换的引号。

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


相关问答

添加新评论