2016-07-04 132 views
1

我想从远程计算机获取一些文件。为此,我制作了一些管道来确定哪些文件必须被提取,并且这些结果也是我想要放入管道中的。如何表示远程计算机上的管道和本地计算机上的管道如下

远程管道合并为1给ssh的命令。

我不知道如何让远程机器上的管道结束,并将结果放入新的本地管道。所以,我做的:

ssh [email protected] find ... | grep ...| awk ...| ls 

第2管是远程(查找,grep的,AWK在远程机器上运行),最后管本地(在本地机器上运行LS)。

+0

正在寻找这个'ssh user @ remote“find ... | grep ... | awk ...”| ls'(注意双引号)?如果不是,请提供有关find,grep,awk命令的更多详细信息以获取[最小,完整和可验证示例](http://stackoverflow.com/help/mcve) – oliv

回答

2

将要在远程计算机上执行的命令的部分封装为双引号。例如。 findgrepawk将被远程执行,而少于本地优先。

ssh [email protected] "find ... | grep ...| awk ... "| less 

正如它更好地使用单引号,如果有带引号的字符串中没有变量替换添加注释“tripleee”。如果远程命令中有变量,则使用"

ssh [email protected] "find $foo | grep ...| awk ... "| less 

或使用'如果没有涉及变量。

ssh [email protected] 'find "foo" | grep ...| awk ... '| less 
+1

单引号更好,除非您专门要求shell在引用的字符串中执行变量替换。如果远程命令行需要包含嵌入的单引号,则双引号也可以用作稍微有点麻烦的解决方法。 – tripleee

+0

谢谢!我会根据你的建议更新我的答案。 – cb0

+0

我也发现了它。在远程命令中,有单引号。所以我用双引号。但有一个惊叹号。所以我不得不停止“”字符串,把!在单引号之间:“...”'!'“...”。但也有一个美元符号,我用一个反斜杠\逃脱。 \我无法逃避惊叹号。也许你知道为什么。 – ericj

相关问题