Wie gebe ich diese Zeile in eine Remote-Datei aus?

268
Dave

Ich verwende eine Bash-Shell und versuche, den richtigen Weg zu finden, um Folgendes zu schreiben:

ssh mysuer@remotehost 'echo "update user set url = \'localhost\' where url = \'mydomain.com\';" >> /tmp/db.sql' 

Bisher funktioniert das oben nicht.

Nach dem Betätigen der Eingabetaste lautet die folgende Zeile so, >als würde sie erwarten, dass ich irgendwo ein offenes Zitat abschließen würde. Was muss ich damit tun?

update user set url = 'localhost' where url = 'mydomain.com'; 

wird in die entfernte Datei ausgegeben?

1
mögliches Duplikat von [Apostrophe in einfachen Anführungszeichenfolgen in Bash] (http://superuser.com/questions/481797/escaping-apostrophe-in-single-quotes-string-in-bash) kenorb vor 9 Jahren 0

2 Antworten auf die Frage

1
kenorb

Einzelne Anführungszeichen können nicht mit Escapezeichen versehen werden. Sie können das vorhandene jedoch beenden, Apostroph ( \') drucken und das neue öffnen.

Hier ist die richtige Syntax:

ssh user@host 'echo "update user set url = '\''localhost'\'' where url = '\''mydomain.com'\'';" >> /tmp/db.sql' 
0
gogoud

Es sollte funktionieren, wenn Sie die Backslashes aus den einfachen Anführungszeichen innerhalb der mysql-Anweisung entfernen:

ssh mysuer@remotehost 'echo "update user set url = 'localhost' where url = 'mydomain.com';" >> /tmp/db.sql' 
Das geht nicht. Stattdessen ist die entfernte Datei otuput "Update user set url = localhost mit url = mydomain.com;". Beachten Sie, dass die einfachen Anführungszeichen um die Keywords herum fehlen, wo ich sie möchte. Dave vor 9 Jahren 0
ok, ändern Sie die einfachen Anführungszeichen in der mysql-Anweisung in doppelte Anführungszeichen. gogoud vor 9 Jahren 0
Hier ist ein anderer Weg: `ssh mysuer @ remotehost 'echo" update user set url = "" "localhost" "" wobei url = "" "mydomain.com" ";" " gogoud vor 9 Jahren 0