Entkomme Awk-Befehl vor Powershell über Plink

674
Bowi

Nachher ( Powershell: Richtig entkommene Apostrophe ) Ich habe immer noch nicht herausgefunden, wie ich diese Fluchtwege richtig ausführen kann, wenn Sie einen Befehl über Plink ausführen, der von Powershell kommt.

Was ich versuche, auf dem Linux-Host auszuführen, ist

df -k / | tail -1 | awk '' 

Dies gibt mir nur die Menge an kostenlosen KB an /.

Da ich an meiner Powershell (Windows) bin, muss ich einen plinkBefehl erstellen, um den Befehl an den Server zu senden . Naiv sieht es so aus:

& plink -ssh -l $user -batch -pw $pw $user@$IP df -k / | tail -1 | awk '' 

Dies schlägt fehl, da PowerShell bei einspringt |und nach einem Befehl sucht tail. Also muss ich den Pfeifen so entkommen:

& plink -ssh -l $user -batch -pw $pw $user@$IP df -k / `| tail -1 `| awk '' 

Das gibt mir awk: cmd. line:1: Unexpected end of string.

Ich denke, ich muss das $4zweimal entkommen, da PowerShell und Linux Bash versuchen, es durch eine Variable zu ersetzen. Aber wie kann ich das machen? Verwenden

\`$4 

ändert die Nachricht nicht

2
Versuchen Sie `` plink -ssh -l $ user -batch -pw $ pw $ user @ $ IP "df -k / | tail -1 | awk '' "` ` testeaxeax vor 6 Jahren 1
Yeees, das geht! Wenn Sie es als Antwort posten, kann ich es akzeptieren. :) Vielleicht könnten Sie einen Hinweis hinzufügen, was zu tun ist, wenn der awk-Befehl auch `'` enthält. Bowi vor 6 Jahren 0

1 Antwort auf die Frage

1
testeaxeax

Sie können verwenden plink -ssh -l $user -batch -pw $pw $user@$IP "df -k / | tail -1 | awk ''".

Powershell Flucht im Allgemeinen:

Escape-Zeichen zwischen zwei Anführungszeichen:

  • $ muss mit entkommen werden `$
  • " muss mit entkommen werden `"
  • ` muss mit entkommen werden ``

Ausnahme:
Ein Nachlauf (am Ende des Anführungszeichens) $muss überhaupt nicht maskiert werden.

Escape-Zeichen zwischen zwei einfachen Anführungszeichen:

  • ' muss mit entkommen werden ''

Escape-Zeichen, die nicht in Anführungszeichen stehen:

  • $ muss mit entkommen werden `$
  • @ muss mit entkommen werden `@
  • # muss mit entkommen werden `#
  • ` muss mit entkommen werden ``
  • | muss mit entkommen werden `|
  • {und }müssen mit `{und entkommen werden`}
  • ; muss mit entkommen werden `;
  • " muss mit entkommen werden `"
  • ' muss mit entkommen werden `'

Ausnahme:
Ein Nachlauf (am Ende des Anführungszeichens) $muss überhaupt nicht maskiert werden.

Spezielle, immer mit Escapezeichen verbundene Zeichen:

  • `0: Nullzeichen
  • `a: Alert-Charakter
  • `b: Backspace-Zeichen
  • `f: Formular-Feed-Zeichen
  • `n: New-Line-Character
  • `r: Wagenrücklauf-Zeichen
  • `t: Horizontal-Tab-Zeichen
  • `v: Vertical-Tab-Zeichen

Spezielle Möglichkeiten, die Analyse von Sonderzeichen zu stoppen:

  • Seit Powershell 2.0 können Sie @' ... '@die Interpretation Ihrer Parameter verhindern, @'müssen sich jedoch in derselben Zeile wie Ihr Befehl befinden. Die Parameter müssen sich in der nächsten Zeile befinden und '@müssen nach den Parametern in einer eigenen Zeile stehen
  • Seit Powershell 3.0 können Sie --%damit aufhören, alles danach zu analysieren--%

Beispiel:

$h@h#h`h|hh;h"h'h$:

  • Mit Anführungszeichen eingeschlossen: exampleprogram.exe "`$h@h#h``h|hh;h`"h'h$"
  • Mit einfachen Anführungszeichen versehen: exampleprogram.exe '$h@h#h`h|hh;h"h''h'$
  • Nicht in Anführungszeichen eingeschlossen: exampleprogram.exe `$h`@h`#h``h`|h`h`;h`"h`'h$
  • Mit @' ... '@:

exampleprogram.exe @ '
$ h @ h # h`h | h h' h'h $
'@

  • Mit --%:exampleprogram.exe --% $h@h#h`h|hh;h"h'h$
Woooow :-)) Wird diese Antwort definitiv mit einem Lesezeichen versehen und wünscht, ich könnte mehr als einmal zustimmen. Bowi vor 6 Jahren 0