使用 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 函数正常工作。
我正在使用 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 函数正常工作。