CPanel将管道传输到linux中的shell脚本,语法

时间:2012-09-04 14:11:50

标签: linux shell cpanel

我正在尝试编写一个shell脚本,其中电子邮件被传送到(通过cpanel中的电子邮件转发)。

然后,shell脚本将使用curl将整个电子邮件发布到URL。

脚本如下所示:

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

前锋看起来像这样:

|/home/usr/script/curlthis.sh

这只是一种工作方式。

即使卷曲成功发布到网址,电子邮件也会被退回。 (看起来只有部分电子邮件被发布,但我不是百分百肯定的)

我被告知电子邮件反弹是因为我没有阅读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,那么无论出于何种原因,电子邮件都会被退回。

1 个答案:

答案 0 :(得分:2)

您的邮件将作为stdin上的传递给脚本,而不是作为参数($1)。请注意,您的转发脚本以管道开头,这是将邮件传递到您的脚本的机制。

所以你应该能够使用read语句在shell(bash?)中读取它。有关详细信息,请参阅this SO answer