0

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

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

当检测到新文件时,将调用以下 bash 脚本add.sh(位于Depot文件夹中):

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

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

$1var 包含文件的名称,var$fileContent包含文件的 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 $1)" <=== Not used anymore in this case

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

我在这里错过了什么吗?我应该使用其他方法而不是cat检索 XML 内容吗?

4

1 回答 1

0

我设法使它工作!

我将 incron 命令更改为:

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

和 bash 脚本:

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

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

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

于 2016-02-26T10:38:23.153 回答