Redirigir stdout sobre ssh

17

Me gustaria correr

something > file

en un sistema remoto a través de ssh, pero si ejecuto

ssh host something > file

la redirección se ejecuta localmente como ssh etc > file

Lo he intentado con 'o ''o ddo con un tubo |en su lugar, pero no puedo conseguir que funcione. ¿Cómo se puede hacer esto?

franziskus
fuente
estado de salida: unix.stackexchange.com/questions/66581/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

11

Tratar:

ssh host 'something > file'

Aquí hay una demostración artificial de una forma de manejar la redirección, tuberías y citas:

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

La tubería y la redirección se escapan en lugar de estar contenidas en un conjunto externo de comillas, lo que reduce la necesidad de escapar de un nivel de comillas. Las comillas simples para el comando AWK están protegidas por las comillas dobles que las rodean. El nombre de archivo podría protegerse de la misma manera, pero aquí muestro cómo las comillas simples protegen las comillas dobles y el escape.

Pausado hasta nuevo aviso.
fuente
gracias - funciona!
franziskus
2
Como ssh pasa esa parte de su línea de comando al shell de todos modos, no necesita la sh -cparte.
Jander
¿Qué pasa si ya tiene comillas dobles y comillas simples en su comando? Si no es demasiado lejos fuera de tema estoy seguro de que otros querrían saber cómo ...
laberinto
1
@labyrinth: agregué un ejemplo para darle algunas ideas. Tenga en cuenta que el shell local consume los conjuntos de comillas más externos y el shell remoto consume el siguiente nivel. En otras palabras, por ejemplo, AWK no ve ninguna cita en sus argumentos como se muestra, pero $1está protegido de que el shell lo vea como una variable de shell. Pero no lo sería si el orden de las citas fuera opuesto.
Pausado hasta nuevo aviso.
10

Aún más simple, en lugar de:

ssh host something > file

hacer:

ssh host "something > file"
Amala
fuente
esta debería ser la respuesta aceptada porque llegó antes que la otra.
phil294
Sí, la respuesta aceptada en 2010 no fue tan buena. Fue cambiado en 2014 probablemente para que coincida con esta respuesta. unix.stackexchange.com/revisions/1631/1
Amala
3

La solución sugerida también funciona con tuberías

ssh host 'some_command | some_other_command'
Miguel
fuente