2015-02-23 640 views
0

我有一个shell脚本,它从两个日期之间的日志文件中提取详细信息,并在输出上执行命令以生成一些报告。日志文件位于不同的服务器上,脚本在不同的服务器上执行。脚本看起来像:从shell脚本在另一台linux服务器上远程执行命令

#!/bin/sh 
time1=$1 
time2=$2 
echo `ssh -i key [email protected] -yes cat file | awk '{if(substr($4,2)>="'$time1'" && substr($4,2)<="'$time2'") print $0;}'` > tmp.log 

`cat tmp.log | some operation to get detail` 

预计将在多行的输出喜欢:

ip1 date1 - - request1 file1 method1 status1 
ip2 date2 - - request2 file2 method2 status2 

但是所产生的输出(通过我的命令)得到连接成单个线,包含所有细节,如:

ip1 date1 - - request1 file1 method1 status1 ip2 date2 - - request2 file2 method2 status2 

当命令直接执行它产生所需的输出而不是在远程执行的服务器上。
所以我的问题是我将如何得到正确的输出,这是一个好办法吗?

+0

反引号中的'echo'不仅愚蠢,而且错误。只需用'whatever'替换'echo''无论什么''。另请参阅http://porkmail.org/era/unix/award.html#echo – tripleee 2015-02-23 09:18:38

+0

删除反引号不会产生任何输出。 – anand 2015-02-23 09:31:36

+0

谢谢我反驳了** \ n **。所以我所做的就是在**“”**内部添加命令,像这样:'echo“\'command \'”' – anand 2015-02-23 09:55:57

回答

2

从上面的评论你仍然使用“回声”。 @tripleee是正确的。别。也不要在开始时使用无意义的猫 - 只需将std重定向到下一个命令即可。

#!/bin/sh 
time1=$1 
time2=$2 
ssh -i key [email protected] -yes cat file | awk '{if(substr($4,2)>="'$time1'" && substr($4,2)<="'$time2'") print $0;}' > tmp.log 

some operation to get detail <tmp.log 
相关问题