2014-12-13 25 views
0

我正在从machineA运行我的脚本并相应地创建日志文件。根据脚本要求,需要通过执行ssh(使用keygen进行无密码操作)导航到MachineB。在MachineB上维护单独的日志文件。现在我想将machineB中的日志文件与machineA中的日志文件合并。由于我无法将MachineB中的scp设置为MachineA无密码,因此考虑将变量中的日志文件内容存储在变量中,然后将该值赋给局部变量,稍后可将该值用于追加MachineA的日志文件。如何将放置在远程服务器中的文件内容复制到本地机器的shell脚本变量中

下面是从代码中提取:

a="$(ssh [email protected] " 
y=$("<"$logfileMachineB); 
exit")" 

输出:"-bash: logfileMachineB: No such file or directory

此外,试图这样做== cat $logfileMachineB但同样的错误。

请帮忙达到要求。

回答

3

要存储一个远程文件到本地机器上的一个变量的内容,你可以这样做:

a=$(ssh [email protected] "cat file") 

如果你不喜欢使用cat,你可以使用相同的echo(虽然我不“T真正看到优势):

a=$(ssh [email protected] "echo \"\$(< file)\"") 

它逃脱内报价和$,使他们不会在本地机器上扩展是很重要的。

无论哪种方式,您现在可以在本地计算机上echo "$a"并查看远程文件的内容。

正如William在评论中指出的那样,在一般情况下,将命令替换$()用双引号括起来以防止与word splitting相关联的问题是个不错的主意。

+1

可能值得指出的是,在这种情况下不要在'$()'附近引用引号是安全的,因为它是一个简单的变量赋值并且不执行分词,但是在许多其他设置中,双引号是$ ()'是必需的。 – 2014-12-13 16:38:34

+0

谢谢,第一个选项工作正常。 – kapil 2014-12-13 18:10:33

+1

@kapil如果您的问题已解决,请不要忘记单击旁边的复选标记✔接受我的答案。 – 2014-12-14 07:31:41

相关问题