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?


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.


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.


3

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

ssh host 'some_command | some_other_command'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.