从shell脚本运行ssh命令

时间:2015-02-11 12:41:02

标签: shell scripting sh

我是shell脚本的新手,我试图从shell脚本运行以下命令。

 diff <(ssh user@remote_host 'cat remote_file.txt') <(ssh user2@remote_host2 'cat remote_file2.txt')

但收到错误:

./a.sh: syntax error at line 1: `(' unexpected

我尝试了一些googleing的示例,它说在代码周围使用$(),但它没有用,任何人都可以帮助我。

2 个答案:

答案 0 :(得分:2)

我知道您想要使用&#39;差异中的两个远程文件的输出。您的解决方案有很多问题:

  • 您无法将两个输出流重定向到一个输入流
  • diff仅适用于文件,而不适用于stdin
  • 使用一个命令的输出作为另一个命令的输入,使用管道完成。重定向可以是从文件到命令,也可以是从命令到文件。
  • 括号用于捆绑命令,例如&#34;(echo a; echo b)|猫&#34;将导致“回声”的输出结果为&#39;并且&#39;回声&#39; b&#39;要在一个流中传递给&#39; cat&#39;输入,只需打印它。

我会做什么(完成我认为你想做的事情)是把它变成三个单独的命令:

ssh user@remote_host 'cat remote_file.txt' > file1
ssh user2@remote_host2 'cat remote_file.txt' > file2
diff file1 file2

答案 1 :(得分:0)

我只是使这个bash脚本没有问题

#!/bin/bash
diff <(ssh user@remote_host cat remote_file.txt) <(ssh user2@remote_host2 cat remote_file2.txt)
exit 0

这项工作与下一个条件:
-remote_host和remote_host2保留在~/.ssh/known_hosts列表中 -user和user2存在且具有权限
-remote_host和remote_host2是可操作的并且具有ssh服务器 -user @ remote_host和user2 @ remote_host2已将ssh配置为无需密码的工作
如果您不知道如何看到http://www.linuxproblem.org/art_9.html

也许您的错误仍然留在',但如果您不使用'remote_file.txt'且仅使用remote_file.txt

,则必须正常运行