通过SSH重定向stdout


17

我想跑步

something > file

在通过ssh的远程系统上,但是如果我运行

ssh host something > file

重定向在本地执行为 ssh etc > file

我已经尝试过使用'or或''or dd或使用管道|来代替它,但是我无法使其正常工作。如何才能做到这一点?


Answers:


11

尝试:

ssh host 'something > file'

这是处理重定向,管道和引号的一种精心设计的演示:

ssh host date -d yesterday \| awk "'{print $1}'" \> 'file" "with\ spaces.out'

管道和重定向被转义,而不是包含在整个外部引号中,从而减少了对一个引号进行转义的需要。AWK命令的单引号由包围它们的双引号保护。可以用相同的方式保护文件名,但是这里我展示了单引号如何保护双引号和转义符。


thanx-有效!
franziskus 2010年

2
由于ssh始终将其命令行的该部分传递给外壳程序,因此您不需要该sh -c部分。
詹德(Jander)

如果命令中已经有双引号和单引号怎么办?如果不是太离题,我敢肯定其他人会想知道如何...
迷宫2014年

1
@labyrinth:我添加了一个示例给您一些想法。请注意,本地外壳使用最外层的引号,而远程外壳使用下一层。换句话说,例如,AWK在其参数中看不到任何引号,如图所示,但是它$1受到保护,不会被shell视为shell变量。但是,引号的顺序不是相反的。
暂停,直到另行通知。


3

建议的解决方案也适用于管道

ssh host 'some_command | some_other_command'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.