sshを介したstdoutのリダイレクト


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'

パイプとリダイレクションは、全体の外側の引用符セットに含まれるのではなくエスケープされ、1レベルの引用符をエスケープする必要性を減らします。AWKコマンドの単一引用符は、それらを囲む二重引用符で保護されています。ファイル名も同じ方法で保護できますが、ここでは単一引用符が二重引用符とエスケープを保護する方法を示します。


感謝-それは動作します!
フランツィスカス

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'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.