Redirecionar stdout sobre ssh

17

Eu gostaria de correr

something > file

em um sistema remoto através do ssh, mas se eu executar

ssh host something > file

o redirecionamento é executado localmente como ssh etc > file

Eu tentei com 'ou ''ou ddcom um cachimbo |, mas não consigo fazê-lo funcionar. Como isso pode ser feito?

Franziskus
fonte
estado de saída: unix.stackexchange.com/questions/66581/...
Ciro Santilli新疆改造中心法轮功六四事件

Respostas:

11

Experimentar:

ssh host 'something > file'

Aqui está uma demonstração artificial de uma maneira de lidar com redirecionamentos, canais e cotações:

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

O canal e o redirecionamento são escapados em vez de contidos em um conjunto externo de cotações, reduzindo a necessidade de escapar de um nível de cotações. As aspas simples para o comando AWK são protegidas pelas aspas duplas que as cercam. O nome do arquivo pode ser protegido da mesma maneira, mas aqui mostro como as aspas simples protegem as aspas duplas e a fuga.

Pausado até novo aviso.
fonte
thanx - funciona!
Franziskus
2
Como o ssh passa essa parte de sua linha de comando para o shell, você não precisa da sh -cparte.
Jander
E se você já tiver aspas duplas e aspas simples em seu comando? Se não for muito longe off-topic tenho certeza que outros gostariam de saber como ...
labirinto
1
@ labyrinth: Adicionei um exemplo para lhe dar algumas idéias. Observe que o shell local consome o (s) conjunto (s) de cotações mais externas e o shell remoto consome o próximo nível. Em outras palavras, por exemplo, o AWK não vê aspas em seus argumentos, como mostrado, mas $1está protegido de ser visto pelo shell como uma variável do shell. Mas não seria se a ordem das aspas fosse oposta.
Pausado até novo aviso.
10

Ainda mais simples, em vez de:

ssh host something > file

Faz:

ssh host "something > file"
Amala
fonte
essa deve ser a resposta aceita, pois veio mais cedo que a outra.
precisa saber é
Sim, a resposta aceita em 2010 não foi tão boa. Foi alterado em 2014 provavelmente para corresponder a esta resposta. unix.stackexchange.com/revisions/1631/1
Amala
3

A solução sugerida também funciona com tubos

ssh host 'some_command | some_other_command'
Mike
fonte