使用变量编辑远程文件

Edit remote file with variables

我写了这个脚本,但它不起作用:

E_OPT=" some_host(ro,insecure) some_host2(ro,insecure)"

echo -n "Insert path to export [ ex: /path/test ]"
read PATH

FINAL=$PATH$E_OPT

ssh SERVER echo "$FINAL" >> file
or
ssh SERVER echo '$FINAL >> file'
or
ssh SERVER 'echo "$FINAL" >> file'

如何传递变量中的文本以追加到远程文件中?

你必须导出 FINAL 变量,此外,你还需要在开头执行你的脚本,如:

。服务器-script.sh

这将评估本地 bash 上的变量,而不是子 shell.

这里有几个问题。第一个是 read PATH。变量 PATH 是许多对系统具有特殊意义的变量之一:它定义了在哪里寻找可执行文件(例如命令)。一旦你将它重新定义为其他东西,系统将无法找到像 ssh 这样的可执行文件,因此命令将开始失败。解决方案:使用小写或混合大小写的变量名,以避免与任何具有特殊含义的变量(全部大写)发生冲突。

其次,您所有的引用尝试都是错误的。该命令将经过两个级别的 shell 解析:首先在本地计算机上(您希望变量 $FINAL 或更好的 $final 被扩展),然后然后在远程服务器上(您希望括号在引号中,这样它们就不会导致 shell 语法错误)。这意味着您需要两个级别的引用:一个由本地 shell 解析和删除的外部级别,以及一个由远程 shell 解析和删除的第二级别。变量扩展只用双引号,不能用单引号,所以外层必须是双引号。内部级别可以是其中之一,但单引号将是最简单的:

ssh SERVER "echo '$final' >> file"

现在,$final 变量可能看起来像是在单引号中,因此它不会被扩展;但引号不嵌套!就本地 shell 而言,这是一个双引号字符串,恰好包含一些单引号或撇号或一些无关紧要的东西。当远程 shell 收到命令时,变量已被替换并删除了外部引号,因此看起来像这样:

echo '/some/path some_host(ro,insecure) some_host2(ro,insecure)' >> file

...这就是你想要的。