たとえば、スペースを含むパターンを使用してリモートサーバーからログファイルを収集したいとします。
grep 'words with spaces' log.txt
難しい部分は、SSHを介してリモートDockercliコマンドを実行することです。それは次のとおりです。
ssh hostname "dockercli exec -u username dockername grep 'sentence with spaces' logs/filename.log"
コンテナがgrepコマンドを実行すると、追加の引用符が削除されます。私は引用符をエスケープし(コマンドは返されません)、順序を反転させて(「古い」)\ sを試しました。
SSHとdockercliを介して実行されるgrepパターンにスペースを含める方法は?
答え1
私はそうしませんでしたが、dockercli
代替sh -c
実験としてデータを解析するための同様のコマンドを提供することもできます。
正しい文字列が渡されたことを確認するためにgrep
例を使用します。
echo 'a b' | ssh localhost "grep 'a b'"
これは、3つのスペースを含む入力文字列と一致します。追加のレイヤーを追加するには、sh -c
次のものが必要です。
echo 'a b' | ssh localhost "sh -c 'grep \"a b\"'"
再び
echo 'a b' | ssh localhost "sh -c 'sh -c \"grep \\\"a b\\\"\"'"