Frage

Ich brauche diesen Befehl auszuführen

psql -c "create database $var with encoding 'unicode';" -U edumate template1

aus dem Skript unter verschiedenen Benutzern. Die su Syntax ist su postre -c 'some command', so gibt es weitere Anführungszeichen erforderlich sind. Bitte beachten Sie auch, dass der psql Befehl $var Variable nach innen hat.

so 'einige Befehle' = psql -c "create database $ var mit kodieren 'Unicode';" -U edumate template1

und ‚einige Befehl‘ muss auch in Anführungszeichen gesetzt werden (ich glaube)

War es hilfreich?

Lösung

Es gibt einen Trick, den Sie jederzeit verwenden können, müssen Sie die Shell akzeptieren als ein einziges Argument, etwas zu haben, das sowohl einzelne und doppelte Anführungszeichen hat. Da die Schale lassen Sie nicht Anführungszeichen entkommen, müssen Sie es in mehrere anstoßenden Strings in Anführungszeichen drehen, zwischen einfachen und doppelten Anführungszeichen Schalt nach Bedarf zu schützen, was drin ist. Es ist hässlich, aber es funktioniert. Zum Beispiel hat

   He said "It's done"

ein Argument sein, könnte man die drei Saiten stoßen:

   'He said "It'   - protect this substring with single quotes
   "'"             - protect this substring with double quotes
   's done"'       - protect this substring with single quotes

bekommen:

   'He said "It'"'"'s done"'

In Ihrem Fall, das ein sehr hässlich geben würde:

su postre -c 'psql -c "create database '"$var with encoding 'unicode';"'" -U edumate template1'

Andere Tipps

Sie können versuchen sudo statt su z.

sudo psql -c "create database $var with encoding 'unicode';" -U edumate template1

(Hinweis: gut haben Getestet habe ich genau diesen Befehl wie ich Ich habe keine psql mit mir jetzt) ??

würde ich dies in einer Skriptdatei eingeben (geben Sie sie in einem Editor wie vi und sie in einer Datei speichern). Dann chmod + x und dann tun Sie Ihre su -c '<filename>'

Wenn Sie nicht in einer Datei gespeichert werden soll, dann werden Sie Ihre Anführungszeichen mit \" oder \' in Ihrem Befehl entkommen müssen je nachdem, welche Sie verwenden zitieren entscheiden mit su -c

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top