当我在命令行中通过它自己运行它时它似乎工作正常,但当我有另一个脚本执行它时,它不起作用。有任何想法吗?我猜测它与引号有关,但不确定。
#!/bin/sh
#Required csvquote from https://github.com/dbro/csvquote
#TODO: Clean CSV File using CSVFix
#Version 3
echo "File Name: $1"
function quit {
echo "Quitting Script"
exit 1
}
function fileExists {
if [ ! -f "$1" ]
then
echo "File $1 does not exists"
quit
fi
}
function getInfo {
#Returns website url like: "http://www.website.com/info"
#Reads last line of a csv file, and gets the 2nd item.
RETURN=$(tail -n 1 $1 | csvquote | cut -d ',' -f 2 | csvquote -u)
echo $RETURN
}
function work {
CURLURL="http://127.0.0.1:9200/cj/_query"
URL=$(getInfo)
echo "URL: $URL"
CURLDATA='{ "query" : { "match" : { "PROGRAMURL" : '$URL' } } }'
#URL shows up as blank...???
echo "Curl Data: $CURLDATA"
RESPONSE=$(curl -XDELETE "$CURLURL" -d "$CURLDATA" -vn)
echo $RESPONSE
echo "Sleeping Allowing Time To Delete"
sleep 5s
}
fileExists $1
work $1
答案 0 :(得分:1)
我不明白为什么一个更简单的版本不会起作用:函数是有用的,但我认为有太多,过于复杂的事情,如果你发布的是你的整个脚本(在我看来)
你的脚本使用破碎的幸运模式做事:$1
变量也是shell函数和主脚本的参数。将它们视为函数的局部变量。因此,当您调用$(getInfo)
时,它正在调用没有参数的函数,因此实际运行tail -n 1
,后退到stdin,您将work
指定为< $1
。您可以通过将echo getInfo_arg_1="$1" >&2
放在函数中来自己看到...
另请注意,您没有在任何地方引用$1
,此脚本在文件安全方面不是空格,但如果您不得不处理从Windows计算机发送给您的文件,则更有可能出现此问题
在没有其他信息的情况下,以下情况应该是&#39;工作:
#!/bin/bash
test -z "$1" && { echo "Please specify a file." ; exit 1; }
test -f "$1" || { echo "Cant see file '$1'." ; exit 1; }
FILE="$1"
function getInfo() {
#Returns website url like: "http://www.website.com/info"
#Reads last line of a csv file, and gets the 2nd item.
tail -n 1 "$1" | csvquote | cut -d ',' -f 2 | csvquote -u
}
CURLURL="http://127.0.0.1:9200/cj/_query"
URL=$(getInfo "$FILE")
echo "URL: $URL"
CURLDATA='{ "query" : { "match" : { "PROGRAMURL" : '$URL' } } }'
curl -XDELETE "$CURLURL" -d "$CURLDATA" -vn
echo "Sleeping Allowing Time To Delete"
sleep 5s
如果仍然失败,您确实需要发布错误消息。
另一件事,特别是如果你从另一个脚本调用它,chmod +x
脚本,这样你就可以运行它,而不必直接用bash
调用它。如果你想打开调试,那么把set -x
放在某处的起点附近。