使用 incron 和 bash 脚本调用 REST API?

Call a REST API using incron and bash script?

我正在使用 incron 检查是否 XML 文件上传到文件夹 Depot 中使用 :

/home/parallels/Desktop/Depot IN_CLOSE_WRITE /home/parallels/Desktop/Depot/add.sh $#

当检测到新文件时,以下 bash 脚本 add.sh(位于 Depot 文件夹)被称为:

#!/bin/bash
fileContent="$(cat )"

curl \
--header "Content-type: application/json" \
--request POST \
--data '{
    "user": "user@mail.com",
    "fileName": "'""'",
    "content": "'"$fileContent"'"
}' \
http://url/of/the/api

</code> var 包含文件的名称,<code>$fileContent var 包含文件的XML 内容。

问题是,当我从命令行手动调用 bash 脚本时(当 Depot 文件夹中已经有一个 XML 文件时)使用 :

./add.sh test.xml

一切正常。但是,当我尝试通过将新的 XML 文件放入文件夹来触发脚本时,它什么也没做,尽管在日志中显示,tail /var/log/syslog 命令给出以下结果:

(parallels) CMD (/home/parallels/Desktop/Depot/add.sh test.xml)

我让它工作的唯一方法(通过在文件夹中放置一个文件)是当内容变量已经在脚本中设置时,就像这样:

#!/bin/bash
fileContent="$(cat )" <=== Not used anymore in this case

curl \
--header "Content-type: application/json" \
--request POST \
--data '{
    "user": "user@mail.com",
    "fileName": "'""'",
    "content": "
        <node>
            <subnode>
                content
            </subnode>
        </node>
"
}' \
http://url/of/the/api

我是不是漏掉了什么?我应该使用 cat 之外的其他方法来检索 XML 内容吗?

我成功了!

我将 incron 命令更改为:

/home/parallels/Desktop/Depot IN_CLOSE_WRITE /home/parallels/Desktop/Depot/add.sh #@/$#

和 bash 脚本到 :

#!/bin/bash
fileContent=`cat `
fileName=$(basename )

curl \
--header "Content-type: application/json" \
--request POST \
--data '
    {
        "user": "user@mail.com",
        "filename": "'"$fileName"'",
        "content": "'"$fileContent"'"
    }' \
http://url/of/the/api

我需要将文件的完整路径发送到 bash 脚本(使用 $@/$#)以使 cat 函数正常工作。