Terminal: wt behandelt Zeilenumbrüche nicht richtig

Erstellt am 16. Feb. 2020  ·  3Kommentare  ·  Quelle: microsoft/terminal

Umgebung

Windows build number: Microsoft Windows [Version 10.0.18363.657]
Windows Terminal Version: 0.9.433.0

Schritte zum Reproduzieren

Führen Sie dies in PowerShell aus:

wt `
new-tab -p PowerShell` Core`;`
split-pane -H -p Windows` PowerShell `;`
split-pane -p cmd

Erwartetes Verhalten

Ich sollte einen neuen Tab zweimal teilen lassen (drei Fenster)

Tatsächliches Verhalten

  1. Ein neues Fenster
    2, drei Registerkarten
  2. Die zweite und dritte Registerkarte enthalten Fehler:
[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

und

[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

Umgehung

Ich fand schließlich heraus, dass es funktioniert, wenn ich nach jedem ; ein Leerzeichen hinzufüge (außer # 4618):

wt `
new-tab -p PowerShell` Core`; `
split-pane -H -p Windows` PowerShell `; `
split-pane -p cmd
Area-Commandline Help Wanted Issue-Bug Product-Terminal Resolution-External

Alle 3 Kommentare

@ Jaykul
In meinen Tests für # 4724 habe ich versucht, den Token-Trennzeichen Wagenrücklauf und Zeilenvorschub für die Befehlszeilenanalyse hinzuzufügen. Als ich jedoch versuchte, Ihr Beispiel auszuführen, stellte sich heraus, dass das Zurück-Häkchen niemals aus der neuen Zeile entweicht, es sei denn, ihm wird ein Leerzeichen vorangestellt. Unabhängig von der App, die Sie aufrufen möchten. Ein anderes Zeichen (nicht nur das Semikolon) direkt vor dem hinteren Häkchen löst nicht das Entkommen der neuen Zeile in der PowerShell-Konsole aus. Kannst du bestätigen? Ich denke, es ist eher ein PowerShell-Problem.
Wenn Sie Ihr Beispiel in einer CMD-Shell ausführen (Zeilenumbruch mit ^ maskiert), funktioniert es bereits, auch ohne \ r und \ n als Token-Trennzeichen im Terminal-Quellcode.

wt ^
new-tab -p "PowerShell Core";^
split-pane -H -p Windows` PowerShell ;^
split-pane -p cmd

Eigentlich, ja, wenn ich das Beispiel aus der Originalausgabe ausführe, aber Leerzeichen vor die Newline-Escape-Backticks setze, bekomme ich Folgendes:

image

Sieht nach einem Problem aus, wie Powershell mit entkommenen Zeilenumbrüchen umgeht.

Du hast absolut recht. Es tut mir leid - ich wollte ein reines PowerShell-Beispiel für diese Syntax erstellen (oder echoargs.exe verwenden), damit ich sicher sagen konnte, was los war, und ich habe es nicht getan, bevor ich das Problem eingereicht habe. Falls dies bei Diskussionen mit anderen PowerShell-Benutzern wie mir hilfreich sein sollte - die vergessen, dass PowerShell _implied_-Zeichenfolgen ausführt -, finden Sie hier ein einfaches Beispiel dafür, was PowerShell falsch macht:

Hinweis: Write-Host akzeptiert eine beliebige Anzahl von Zeichenfolgenparametern

image

Und wenn Sie eine seltsame Zeichenfolge wie diese an einen "nativen" Befehl übergeben, wird sie von PowerShell in Anführungszeichen gesetzt:

image

Grundsätzlich passiert Folgendes:

  1. Da es sich um eine Shell handelt, benötigt PowerShell keine Anführungszeichen um Zeichenfolgenparameter.
    2, PowerShell behandelt einen Escape-Zeilenumbruch _in_ einer Zeichenfolge anders als einen Escape-Zeilenumbruch am Ende einer Befehlszeile (dies ist die Zeilenfortsetzung).

Wenn wir kein Leerzeichen zwischen dem `; (dem wir entkommen sind, es ist also nur eine Zeichenfolge) und der neuen Zeile lassen, muss PowerShell davon ausgehen, dass es Teil einer Zeichenfolge ist und keine separate Zeile - Fortsetzungszeichen. Wir können dies vermeiden, indem wir es implizit durch ein Leerzeichen von der Zeichenfolge trennen (wie ich es in meiner "Problemumgehung" oben getan habe) oder indem wir die Zeichenfolge explizit in Anführungszeichen setzen:

wt `
new-tab -p "PowerShell Core" ";"`
split-pane -H -p "Windows PowerShell" ";"`
split-pane -p cmd
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen