我写了这个脚本,但它不起作用:
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'
如何在变量中传递文本以附加到远程文件中?
答案 0 :(得分:0)
您必须导出FINAL变量,此外,您还需要在开头使用点执行脚本,例如:
。 server-script.sh
这将评估本地bash上的变量,而不是子shell。
答案 1 :(得分:0)
这里有几个问题。第一个是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
......这就是你想要的。