Запрос Postgresql в скрипте bash

У нас проблема с запросом PostgreSQL bash. Вывод запроса из сценария bash добавляет дополнительные кавычки вокруг даты. Пожалуйста, вы можете помочь мне исправить это?!

сценарий:

#!/bin/sh

lastmonth=$(date -d "-1 month -$(($(date +%d)-1)) days" +%Y-%m-%d)
thismonth=$(date -d '-1 month -12 days' +%Y-%m-%d)

sudo -u postgres psql -d linetest_uptime -A -o /tmp/linetest_$(date +%Y-%m-%d).txt -c "select t.*, ip,port from line_test t,service_address s where '$thismonth' <= start and start < '$lastmonth' and service_address_id=s.id order by t.start,status desc" >/dev/null 2>&1 && sudo mv /tmp/linetest_$(date +%Y-%m-%d).txt /reporting/line_test_data/ && sudo chown $USER:$USER /reporting/line_test_data/linetest_$(date +%Y-%m-%d).txt

вывод:

sudo -u postgres psql -d linetest_watchdog -A -o /tmp/linetest_2014-03-13.txt -c 'select t.*, ip,port from line_test t,service_address s where '''2014-02-01''' <= start and start < '''2014-02-01''' and service_address_id=s.id order by t.start,status desc

нам нужно удалить'''', который теперь обернут вокруг переменной даты.

5
задан Willi Mentzel
источник

1 ответов

это не похоже на вывод ваших команд-это какой-то отладочный вывод?

что у вас есть выглядит правильно, в том, что он может быть подан в оболочку и дать то, что вы просили. Обратите внимание, что 'aaa'\''bbb' идентичен "aaa'bbb"!

Примечание: ваши переменные выглядят немного усложненными, и вы повторяете $(date +%Y-%m-%d); следующее может помочь:

lastmonth=$(date -d "-1 month" +%Y-%m-01)
thismonth=$(date +%Y-%m-01)
today=$(date +%Y-%m-%d)

и SQL-запрос может быть более идиоматичным, чем ... where date between '$lastmonth' and '$thismonth' ....

0
отвечен Toby Speight 2015-08-26 16:30:25
источник

Другие вопросы bash bash-scripting postgresql psql