Postgresql-Abfrage innerhalb eines Bash-Skripts

2293
GuruFrog

Wir haben ein Problem mit einer Postgresql-Bash-Abfrage. Die Ausgabe der Abfrage aus dem Bash-Skript fügt zusätzliche Anführungszeichen um das Datum hinzu. Kannst du mir helfen, das Problem zu beheben ?!

Skript:

#!/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 

Ausgabe ist:

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 

Wir müssen das '\' '\' entfernen, das jetzt um die Datumsvariable gelegt wird.

1
Hast du es mit sed probiert? tftd vor 10 Jahren 0

1 Antwort auf die Frage

0
Toby Speight

Das sieht nicht aus wie die Ausgabe Ihrer Befehle - gibt es stattdessen eine Debug-Ausgabe?

Was Sie haben, sieht insofern korrekt aus, als es in die Schale eingezogen werden könnte und das geben kann, wonach Sie gefragt haben. Beachten Sie, dass 'aaa'\''bbb'das identisch ist mit "aaa'bbb"!

Randbemerkung: Ihre Variablen sehen etwas unkompliziert aus und Sie wiederholen sich $(date +%Y-%m-%d); Folgendes kann helfen:

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

und die SQL-Abfrage kann idiomatischer sein als ... where date between '$lastmonth' and '$thismonth' ....