2017-05-01 1 views
0

J'ai la ligne ci-dessous dans mon script shell bash;Redirection de la sortie Shell vers SNS

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

Ceci affichera une ligne comme "Mon, 01 May 9: 29,20 SUPPRIMER /home/ubuntu/test/test.php" chaque fois que la ligne est exécutée.

Est-il possible d'effectuer un pipeline au-dessus de la sortie directement vers AWS SNS? J'ai essayé d'utiliser jq pour formater la sortie en json avant de la rediriger mais il n'y a pas de sortie quand elle est utilisée comme ci-dessous.

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")' 

Et l'extraction directe de la sortie ne fonctionnera pas.

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

ce qui arrive quand vous venez de verser le résultat de 'grep' sur stdout? –

+0

Pourquoi avez-vous besoin de formater en json? Il semble que vous ayez besoin de l'analyser sur les paramètres de requête (voir [une demande d'échantillon] (http://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html#API_DeleteTopic_Example_Example_Request)). en passant, pourquoi ne pas utiliser le [CLI] (https://docs.aws.amazon.com/cli/latest/index.html)? –

+0

Je reçois la sortie que je veux sous forme de chaîne. ex: "Mon, Mai 01 9: 29.20 SUPPRIMER /home/ubuntu/test/test.php" – Geeshan

Répondre

0

Je ne vois aucune référence dans la documentation à la commande aws pouvoir recevoir les commentaires de stdin, il semble qu'il n'y a aucun moyen de le faire.

Vous pouvez passer tous les arguments comme json, cependant, avec --cli-input-json, mais cela n'a aucune utilité dans notre cas.

Vous n'avez pas spécifié quel champ vous voulez remplir avec la sortie de inotifywait, mais en supposant que vous voulez passer un message, tout ce que vous avez besoin est de rediriger la sortie vers un option value:

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)"