質問

Ubuntu Linuxがあります。 1つのコマンドでGmailから未読メッセージの件名をダウンロードできることがわかりました:

curl -u USERNAME:PASSWORD --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | sed -n "s/<title>\(.*\)<\/title.*name>\(.*\)<\/name>.*/\2 - \1/p"

...そして、メールを簡単に送信できる別のコマンド(apt-getを介してsendemailコマンドをインストールしたら):

sendEmail -f EMAIL@DOMAIN.COM -v -t PHONE@SMS.COM -u Gmail Notifier -m test -s MAILSERVER:PORT -xu EMAIL@DOMAIN.COM -xp PASSWORD

(本番環境では、おそらく-vを-qと交換することに注意してください)

つまり、1つのコマンドが1行の件名をダウンロードする場合、これらをsendEmailコマンドにパイプするにはどうすればよいですか

たとえば、&quot; $ 1&quot;を使用して、2つの間にパイプ文字を使用しようとしました。 -mパラメーターの後、しかし、何が起こったのかは、未読の電子メールがない場合でも、少なくとも1つの空のメッセージを送信するということでした。

これを手伝ってくれたら、この情報を使用して、自分の携帯電話でSMSメッセージに接続できるGmailチェッカーの作成方法をStackOverflowで共有します。

役に立ちましたか?

解決

viraptorと&amp;を混ぜると思いますDigitalRossの答えは、あなたが望むものを手に入れます。次の入力で偽のファイルを作成して、サンプルテストを作成しました。

ファイルの内容:

foo

bar

baz

次に、このコマンドを実行しました:

% cat ~/tmp/baz | while read x; do if [[ $x != "" ]]; then echo "x: '$x'"; fi; done

これは、入力のある行のみを印刷します。私はsendEmailに慣れていません。ボディが標準入力にある必要がありますか、それともコマンドラインで渡すことができますか?

他のヒント

フィルターとSMSメールゲートウェイを使用して、Gmailで直接実行できることを知っていますか?

しかし質問に戻って...

次の設計パターンを使用して、コマンド出力用のシェルスクリプトで制御を取得できます。

command1 | while read a b c restofline; do
    : execute commands here
    : command2
done

Readは、最初の単語を a に、2番目の単語を b に、残りの行を restofline に入れます。ループが単一のコマンドのみで構成されている場合、 xargs プログラムはおそらくあなたが望むことをするでしょう。特に、コマンド内の任意の場所に置換された引数を配置できる -I パラメータについて読んでください。

ループはのように見える場合があります... | xを読みながらdo 。行全体を x に入れます。

この構造を試してください:

while read line
do
    sendemailcommand ... -m $line ...
done < <(curlcommand)

必要なすべての機能を提供する xargs コマンドを調べます(私が知る限り)。

http://unixhelp.ed.ac.uk/CGI/man -cgi?xargs

おそらく次のようなものです:

curl_command > some_file
if [[ `wc -l some_file` != "0 some_file" ]] ; then
  email_command < some_file
fi
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top