1

私は、電子メールが(cpanelで転送される電子メールによって)パイプされるシェルスクリプトを作成しようとしています。

シェルスクリプトは、curlを使用して電子メール全体をURLに投稿します。

スクリプトは次のようになります。

curl -d "param=$1" http://localhost/stuff/

そして、フォワードは次のようになります。

|/home/usr/script/curlthis.sh

これは一種の作業にすぎません。

カールがURLに正常に投稿されても、電子メールは返送されます。(メールの一部しか投稿されていないようですが、100%確信はありません)

stdinを読んでいないためにメールが返送されると言われましたが、なぜそれを行う必要があるのか​​、なぜ$1を使用できないのかわかりません。

パイプの内容全体を読み取る(次にcurlを使用して投稿する)にはどうすればよいですか?これにより、メールサーバーがパイプをバウンスするのを防ぐことができますか?

編集

以下の答えを使用して、私が思いついたものです:

#!/bin/bash
m=$(cat -) 
escapedm="$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$m")"
curl -silent -G -d "param=$escapedm" http://localhost/stuff/ 2>&1 >/dev/null

この部分:

2>&1 >/dev/null

驚くほど重要です。stdout / errをnullにリダイレクトしないと、何らかの理由で電子メールが返送されます。

4

1 に答える 1

2

メールは、パラメータとしてではなく、stdinのストリーム$1としてスクリプトに渡されます ( )。転送スクリプトはパイプで始まることに注意してください。これがメールをスクリプトに渡すメカニズムです。

readしたがって、ステートメントを使用して、シェル (bash?) でこれを読み取ることができるはずです。詳細については、この SO の回答を参照してください。

于 2012-09-04T14:15:37.783 に答える