Перенаправити stdout на 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 захищені подвійними цитатами, які їх оточують. Ім'я файлу можна захистити таким же чином, але тут я показую, як одиничні лапки захищають подвійні лапки та втечу.


ніж - це працює!
franziskus

2
Оскільки ssh так чи інакше передає цю частину свого командного рядка оболонці, ця sh -cчастина вам не потрібна .
Яндер

Що робити, якщо у вашій команді вже є подвійні лапки та одинарні лапки? Якщо це не надто далеко поза темою, я впевнений, що інші хочуть знати, як ...
лабіринт

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.