Перенаправить стандартный вывод через SSH


17

Я хотел бы бежать

something > file

на удаленной системе через ssh, но если я запускаю

ssh host something > file

перенаправление выполняется локально как ssh etc > file

Я попробовал это с 'или ''или ddили с трубой |вместо этого, но я не могу заставить это работать. Как это может быть сделано?


Ответы:


11

Пытаться:

ssh host 'something > file'

Вот надуманная демонстрация способа обработки перенаправления, каналов и кавычек:

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

Канал и перенаправление экранированы, а не содержатся в общем внешнем наборе кавычек, что уменьшает необходимость избегать одного уровня кавычек. Одинарные кавычки для команды AWK защищены двойными кавычками, которые их окружают. Имя файла может быть защищено таким же образом, но здесь я покажу, как одинарные кавычки защищают двойные кавычки и escape.


Спасибо - это работает!
franziskus

2
Так как ssh передает эту часть своей командной строки в оболочку, эта sh -cчасть вам не нужна .
Jander

Что если в вашей команде уже есть двойные кавычки и одинарные кавычки? Если это не слишком далеко от темы, я уверен, что другие хотели бы знать, как ...
лабиринт

1
@labyrinth: я добавил пример, чтобы дать вам несколько идей. Обратите внимание, что локальная оболочка потребляет самые внешние наборы цитат, а удаленная оболочка - следующий уровень. Другими словами, например, AWK не видит кавычек в своих аргументах, как показано, но $1он защищен от того, что оболочка рассматривается как переменная оболочки. Но не было бы, если бы порядок цитат был противоположным.
Приостановлено до дальнейшего уведомления.

10

Еще проще, вместо:

ssh host something > file

делать:

ssh host "something > file"

это должен быть принятый ответ, потому что он пришел раньше, чем другой.
phil294

Да, принятый ответ в 2010 году был не так хорош. Это было изменено в 2014 году, вероятно, чтобы соответствовать этому ответу. unix.stackexchange.com/revisions/1631/1
Амала

3

Предлагаемое решение работает и с трубами

ssh host 'some_command | some_other_command'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.