2013-03-22 14 views
5

Ich lese alle Lösungen für Escape-einfache Anführungszeichen auf Remote-Befehl über ssh. Aber jede Arbeit fien.Escape einfache Anführungszeichen ssh Remote-Befehl

Ich versuche

ssh [email protected] "ps uax|grep bac | grep -v grep | awk '{ print $2 }' > /tmp/back.tmp" 

nicht AWK

ssh [email protected] "ps uax|grep bac | grep -v grep | awk \'{ print $2 }\' > /tmp/back.tmp" 
.... 
awk: '{ 
awk:^caracter ''' inválido en la expresión 

Arbeit machen und versuchen, einzelne Kontingente auf Befehl setzen, aber auch nicht funktionieren.

Aprecite

helfen

Antwort

7

in Ihrem ersten Versuch Sie doppelte Anführungszeichen verwenden " so müssen Sie den $ Charakter entkommen:

ssh [email protected] "ps uax|grep bac | grep -v grep | awk '{ print \$2 }' > /tmp/back.tmp" 
                   ▲ 
Auch

, können Sie verwenden:

ps uax | grep 'ba[c]' | ... 

so dann brauchst du den Schritt grep -v grep nicht.

+0

Wauuuuu ... vielen Dank ... zu viele Ausgaben für diese Frage ... ein schöner Tag – abkrim

8

Der Befehl ssh behandelt den nach dem Hostnamen eingegebenen Text als auszuführenden Remote-Befehl. Was das für Ihre Frage bedeutet, ist, dass Sie nicht den gesamten Befehl angeben müssen, wie Sie es getan haben. Stattdessen können Sie den Befehl einfach so senden, als würden Sie ihn eingeben, als wären Sie auf dem Remote-System selbst.

Dies vereinfacht den Umgang mit Angebotsproblemen, da die Anzahl der anzuwendenden Angebote reduziert wird. Da Sie keine Anführungszeichen verwenden werden, müssen alle speziellen Bash-Zeichen mit Backslashes.

In Ihrer Situation, müssen Sie eingeben,

ssh [email protected] ps uax \| grep ba[c] \| \'{ print \$2 }\' \> /tmp/back.tmp 

oder Sie können doppelte Anführungszeichen die einfachen Anführungszeichen anstatt sie zu entkommen (in beiden Fällen müssen Sie das Dollarzeichen zu entkommen)

ssh [email protected] ps uax \| grep ba[c] \| "'{ print \$2 }'" \> /tmp/back.tmp 

Ehrlich gesagt fühlt sich das ein wenig komplizierter an, aber ich habe festgestellt, dass dieses Wissen sehr wertvoll ist, wenn es darum geht, Befehle an entfernte Systeme zu senden, die komplexere Zitate verwenden.