Rediriger stdout sur ssh

17

Je voudrais courir

something > file

sur un système distant via ssh, mais si je lance

ssh host something > file

la redirection est exécutée localement comme ssh etc > file

Je l'ai essayé avec 'ou ''ou ddou avec une pipe à la |place, mais je ne peux pas le faire fonctionner. Comment cela peut-il être fait?

franziskus
la source
état de sortie: unix.stackexchange.com/questions/66581/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

11

Essayer:

ssh host 'something > file'

Voici une démonstration artificielle d'un moyen de gérer la redirection, les tuyaux et les citations:

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

Le canal et la redirection sont échappés au lieu d'être contenus dans un ensemble externe de guillemets, ce qui réduit le besoin d'échapper à un niveau de guillemets. Les guillemets simples pour la commande AWK sont protégés par les guillemets doubles qui les entourent. Le nom de fichier pourrait être protégé de la même manière, mais ici je montre comment les guillemets simples protègent les guillemets doubles et l'échappement.

En pause jusqu'à nouvel ordre.
la source
merci - ça marche!
franziskus
2
Puisque ssh transmet de toute façon cette partie de sa ligne de commande au shell, vous n'avez pas besoin de la sh -cpartie.
Jander
Que faire si vous avez déjà des guillemets doubles et des guillemets simples dans votre commande? Si ce n'est pas trop loin du sujet, je suis sûr que d'autres voudraient savoir comment ...
labyrinthe
1
@labyrinth: J'ai ajouté un exemple pour vous donner quelques idées. Notez que le shell local consomme le ou les ensembles de guillemets les plus externes et le shell distant consomme le niveau suivant. En d'autres termes, par exemple, AWK ne voit pas de guillemets dans ses arguments comme indiqué, mais il $1est protégé contre le fait d'être vu par le shell en tant que variable de shell. Mais ce ne serait pas si l'ordre des citations était opposé.
pause jusqu'à nouvel ordre.
10

Encore plus simple, au lieu de:

ssh host something > file

faire:

ssh host "something > file"
Amala
la source
cela devrait être la réponse acceptée car elle est venue plus tôt que l'autre.
phil294
Oui, la réponse acceptée en 2010 n'était pas si bonne. Il a été modifié en 2014 probablement pour correspondre à cette réponse. unix.stackexchange.com/revisions/1631/1
Amala
3

La solution suggérée fonctionne également avec les tuyaux

ssh host 'some_command | some_other_command'
Mike
la source