Конвейер электронной почты CPanel в сценарий оболочки в Linux, синтаксис

Я пытаюсь написать сценарий оболочки, куда передаются электронные письма (по электронной почте, пересылаемой в cpanel).

Затем сценарий оболочки отправит все электронное письмо по URL-адресу с помощью curl.

Скрипт выглядит так:

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

А форвард выглядит так:

|/home/usr/script/curlthis.sh

Это всего лишь вид работы.

Электронное письмо возвращается, даже если curl успешно отправляет URL-адрес. (похоже, публикуется только часть письма, но я не уверен на 100%)

Мне сказали, что электронная почта не возвращается, потому что я не читаю стандартный ввод, но я не уверен, почему мне нужно это делать и почему я не могу использовать $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, электронное письмо будет возвращено по какой-либо причине.


person jhnclvr    schedule 04.09.2012    source источник


Ответы (1)


Ваша почта передается сценарию как поток на стандартный ввод, а не как параметр ($1). Обратите внимание, что ваш сценарий пересылки начинается с конвейера, и это механизм, передающий почту в ваш сценарий.

Таким образом, вы должны иметь возможность прочитать это в своей оболочке (bash?), используя оператор read. Подробнее см. этот ответ SO.

person Brian Agnew    schedule 04.09.2012