我使用incron检查XML文件是否上载到文件夹库中,使用:
/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
XML包含文件名,$1
var包含文件的$fileContent
内容。
问题是,当我从命令行手动调用bash脚本时(当Depot文件夹中已经有一个XML文件时):
./add.sh test.xml
一切都很好。但是,当我试图通过将一个新的XML文件放入文件夹来触发脚本时,它什么也不做,尽管在日志中显示了tail /var/log/syslog
命令,给出了以下结果:
(parallels) CMD (/home/parallels/Desktop/Depot/add.sh test.xml)
让它工作的唯一方法(通过在文件夹中删除一个文件)是在脚本中设置了content时,如下所示:
#!/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内容吗?
发布于 2016-02-26 10:38:23
我设法让它运转起来了!
我将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函数正常工作。
https://stackoverflow.com/questions/35626524
复制相似问题