Reindirizza stdout su ssh


17

Mi piacerebbe correre

something > file

su un sistema remoto tramite ssh, ma se corro

ssh host something > file

il reindirizzamento viene eseguito localmente come ssh etc > file

L'ho provato con 'o ''o ddo con una pipa |invece, ma non riesco a farlo funzionare. Come si può fare?


Risposte:


11

Provare:

ssh host 'something > file'

Ecco una dimostrazione inventata di un modo per gestire reindirizzamento, pipe e virgolette:

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

La pipe e il reindirizzamento vengono salvati anziché essere contenuti in un insieme esterno di virgolette, riducendo la necessità di sfuggire a un livello di virgolette. Le virgolette singole per il comando AWK sono protette dalle virgolette doppie che le circondano. Il nome file potrebbe essere protetto allo stesso modo, ma qui mostro come le virgolette singole proteggono le virgolette doppie e la escape.


grazie - funziona!
franziskus,

2
Poiché ssh passa comunque quella parte della sua riga di comando alla shell, non è necessaria la sh -cparte.
Jander

Cosa succede se hai già virgolette doppie e virgolette singole nel tuo comando? Se non è troppo fuori tema sono sicuro che altri vorrebbero sapere come ...
labirinto

1
@labyrinth: ho aggiunto un esempio per darti alcune idee. Si noti che la shell locale consuma l'insieme più esterno di virgolette e la shell remota utilizza il livello successivo. In altre parole, ad esempio, AWK non vede alcuna virgoletta nei suoi argomenti come mostrato, ma $1è protetta dall'essere vista dalla shell come variabile di shell. Ma non sarebbe se l'ordine delle virgolette fosse contrario.
In pausa fino a nuovo avviso.

10

Ancora più semplice, invece di:

ssh host something > file

fare:

ssh host "something > file"

questa dovrebbe essere la risposta accettata perché è arrivata prima dell'altra.
phil294,

Sì, la risposta accettata nel 2010 non è stata così buona. È stato modificato nel 2014 probabilmente per corrispondere a questa risposta. unix.stackexchange.com/revisions/1631/1
Amala

3

La soluzione suggerita funziona anche con i tubi

ssh host 'some_command | some_other_command'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.