如何在本地机器的shell脚本变量中复制放置在远程服务器中的文件内容

时间:2014-12-13 13:45:32

标签: bash shell ssh

我正在从machineA运行我的脚本并相应地创建日志文件。根据脚本要求,需要通过执行ssh(使用keygen无密码)导航到MachineB。在MachineB上维护单独的日志文件。现在我想将machineB中的logfile与machineA中的logfile合并。由于我无法将scp从MachineB变为MachineA无密码,因此考虑将变量中的logfile内容存储在MachineB中的变通方法,然后将该值分配给本地变量,该变量稍后可用于追加到MachineA的日志文件中。

以下是代码摘录:

a="$(ssh userw@server.com "
y=$("<"$logfileMachineB);
exit")"

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

另外,尝试做== cat $logfileMachineB但同样的错误。

请帮助达到要求。

1 个答案:

答案 0 :(得分:3)

要将远程文件的内容存储到本地计算机上的变量,您可以执行以下操作:

a=$(ssh user@remote "cat file")

如果您不想使用cat,可以使用echo执行相同操作(虽然我不太了解优势):

a=$(ssh user@remote "echo \"\$(< file)\"")

重要的是要转义内部引号和$,以便它们不会在本地计算机上展开。

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

正如William在评论中指出的那样,通常将命令替换$()括在双引号中是个好主意,以防止与word splitting相关的问题。