Как передать текущую дату в запрос curl с помощью сценария оболочки?
я вставляю данные в эластичный поиск с помощью CURL, он отлично работает, когда я вставляю с фиксированными данными. Я пытаюсь получить текущее DateTime и назначить переменной и использовать с объектом, который я хочу вставить.
вот мой скрипт
while true;
do
echo $i
number=$RANDOM;
let "number %= 9";
let "number = number + 1";
range=10;
for i in {1..18}; do
r=$RANDOM;
let "r %= $range";
number="$number""$r";
done;
curl -XPUT 'http://localhost:9200/nondomain_order/orders/'+$number+'' -d '{
"CustType": null,
"tag": "OrderType:Postpaid",
"GUDeviceID": "0",
"IsAvailable": false,
"GUOrderID": "123",
"OrderID": "3",
"OrderDate": "2015-01-06T15:23:42.7198285+05:30",
"GUAccountID": "15010615234251403",
"CreateUser": "admin",
"CreateDate": "2015-01-01T15:23:42",
"CancelledDate": "1899-01-01T00:00:00",
"CancelledUser": null,
"GUTranID": "15010615234271604",
"TenentID": 39,
"CompanyID": 42,
"ViewObjectID": 0,
"ObjectID": null,
"Status": 2,
"OrderDetails": [
{
"GUPromtionID": "15010519341113508",
"GUOrderID": "15010615234271703",
"ChangeID": 0,
"GUPackageID": "14100112243589402",
"startdate": "2015-01-06T00:00:00"
}
]
Мне нужно получить текущее DateTime и назначить CreateDate. Как я могу это сделать?
3 ответов
вместо того, чтобы играть с кавычками внутри кавычек, я бы предложил использовать здесь-doc, чтобы избавиться от всех магических кавычек. Использовать curl
такой:
number=10
dt="$(date --iso-8601=seconds)"
curl -XPUT 'http://localhost:9200/nondomain_order/orders/'$number -d@- <<EOF
{
"CustType": null,
"tag": "OrderType:Postpaid",
"GUDeviceID": "0",
"IsAvailable": false,
"GUOrderID": "123",
"OrderID": "3",
"OrderDate": "2015-01-06T15:23:42.7198285+05:30",
"GUAccountID": "15010615234251403",
"CreateUser": "admin",
"CreateDate": "$dt",
"CancelledDate": "1899-01-01T00:00:00",
"CancelledUser": null,
"GUTranID": "15010615234271604",
"TenentID": 39,
"CompanyID": 42,
"ViewObjectID": 0,
"ObjectID": null,
"Status": 2,
"OrderDetails": [
{
"GUPromtionID": "15010519341113508",
"GUOrderID": "15010615234271703",
"ChangeID": 0,
"GUPackageID": "14100112243589402",
"startdate": "2015-01-06T00:00:00"
}
]
}
EOF
внутри вашей строки измените
"CreateDate": "2015-01-01T15:23:42",
to
"CreateDate": "'"$(date +%Y-%m-%dT%H:%M:%S)"'",
там, я прекратил '
строка и начал "
строку с $(date)
внутри него. В противном случае он не будет выполнен, а просто передан curl
как строку.
вы также можете назначить его переменной заранее и использовать его позже, как это:
now=$(date +%Y-%m-%dT%H:%M:%S)
...
"CreateDate": "'"$now"'",
другой проблемы
изменить
curl -XPUT 'http://localhost:9200/nondomain_order/orders/'+$number+'' -d '{
на
curl -XPUT 'http://localhost:9200/nondomain_order/orders/'"$number" -d '{
bash конкатенация-это всего лишь две строки одна за другой без промежутка между ними. В противном случае он будет запрашивать URL-адреса, такие как http://localhost:9200/nondomain_order/orders/+0123456789+
вместо http://localhost:9200/nondomain_order/orders/0123456789
(здесь, я защищал number
переменная против расширения с двойными кавычками для безопасности, если она когда-либо изменится)
вы можете сделать это так:
DATE_ISO=$(date +"%Y-%m-%dT%H:%M:%S")
...
curl -XPUT 'http://localhost:9200/nondomain_order/orders/'+$number+'' -d '{
...
"CreateDate": "'"$DATE_ISO"'",
...
}'