2017-05-01 8 views
0

私のbashシェルスクリプトには次の行があります。シェルの出力をSNSにリダイレクト

inotifywait -e "$EVENTS" -m -r --format '%T %:e %w%f' --timefmt "%a, %b %d %l:%M.%S" ${basedir} | grep "${filetype}" 

のような行この意志出力 "月、5月1日9:29.20は/home/ubuntu/test/test.php DELETE" その行が実行されるたびに

上記の出力をAWS SNSに直接パイプライン接続することは可能ですか?私はそれをリダイレクトする前にjsonに出力をフォーマットするためにjqを使ってみましたが、以下のように使用すると出力はありません。

inotifywait -e "$EVENTS" -m -r --format '%T %:e %w%f' --timefmt "%a, %b %d %l:%M.%S" ${basedir} | grep "${filetype}" | jq -R -s -c 'split("\n")' 

出力を直接ピッキングすると機能しません。

inotifywait -e "$EVENTS" -m -r --format '%T %:e %w%f' --timefmt "%a, %b %d %l:%M.%S" ${basedir} | grep "${filetype}" | aws sns publish --topic-arn "${sns}" 
+1

ときに何が起こりますか'grep'の結果を標準出力に流します。 –

+0

なぜjsonにフォーマットする必要がありますか?リクエストパラメータ(「[サンプルリクエスト](http://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html#API_DeleteTopic_Example_Example_Request)」を参照)で解析する必要があるようです。ちなみに、[CLI](https://docs.aws.amazon.com/cli/latest/index.html)を使用してみませんか? –

+0

私は文字列として必要な出力を取得します。 例: "月、01月9日:29.20 DELETE /home/ubuntu/test/test.php" – Geeshan

答えて

0

私はstdinからの入力を受け取ることができることawsコマンドにドキュメント内のすべての参照が表示されないので、それをする方法はありませんようです。

すべての引数を--cli-input-jsonでjsonとして渡すことはできますが、私たちの場合は使用しません。

あなたはinotifywaitの出力を取り込むしたいフィールドを指定しますが、あなたが必要とするすべてのoption valueに出力をリダイレクトすることで、あなたはmessageを渡したいと仮定しませんでした:

get_message() { 
    inotifywait -e "$EVENTS" -m -r --format '%T %:e %w%f' --timefmt "%a, %b %d %l:%M.%S" ${basedir} | grep "${filetype}" 
} 
aws sns publish --topic-arn "${sns}" --message "$(get_message)" 
関連する問題