Przekieruj standardowe wyjście przez ssh


17

Chciałbym uciec

something > file

na zdalnym systemie przez ssh, ale jeśli uruchomię

ssh host something > file

przekierowanie jest wykonywane lokalnie jako ssh etc > file

Próbowałem go 'lub ''lub ddlub z rurą |zamiast, ale nie mogę zmusić go do pracy. Jak można to zrobić?


Odpowiedzi:


11

Próbować:

ssh host 'something > file'

Oto wymyślona demonstracja sposobu obsługi przekierowań, potoków i cytatów:

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

Potok i przekierowanie są unikane, a nie zawarte w ogólnym zewnętrznym zestawie cytatów, zmniejszając potrzebę ucieczki o jeden poziom cytatów. Pojedyncze cudzysłowy dla polecenia AWK są chronione podwójnymi cudzysłowami, które je otaczają. Nazwa pliku może być chroniona w ten sam sposób, ale tutaj pokazuję, jak pojedyncze cudzysłowy chronią podwójne cudzysłowy i znak ucieczki.


dzięki - działa!
franziskus

2
Ponieważ ssh przekazuje tę część wiersza poleceń do powłoki, nie potrzebujesz tej sh -cczęści.
Jander

Co zrobić, jeśli masz już podwójne cudzysłowy i pojedyncze cudzysłowy? Jeśli nie jest to zbyt daleko od tematu, jestem pewien, że inni chcieliby wiedzieć, jak ...
labirynt

1
@labyrinth: Dodałem przykład, aby dać ci kilka pomysłów. Zauważ, że lokalna powłoka zużywa najbardziej zewnętrzne zestawy cytatów, a zdalna powłoka zużywa następny poziom. Innymi słowy, na przykład AWK nie widzi w swoich argumentach żadnych cudzysłowów, ale $1jest chroniony przed powłoką jako zmienną powłoki. Ale nie byłoby tak, gdyby kolejność cytatów była odwrotna.
Wstrzymano do odwołania.

10

Jeszcze prostsze, zamiast:

ssh host something > file

robić:

ssh host "something > file"

powinna to być zaakceptowana odpowiedź, ponieważ nadeszła wcześniej niż druga.
phil294

Tak, zaakceptowana odpowiedź w 2010 roku nie była tak dobra. Został zmieniony w 2014 r. Prawdopodobnie w celu dopasowania do tej odpowiedzi. unix.stackexchange.com/revisions/1631/1
Amala

3

Sugerowane rozwiązanie działa również z rurami

ssh host 'some_command | some_other_command'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.