Terminal: wt não lida com novas linhas adequadamente

Criado em 16 fev. 2020  ·  3Comentários  ·  Fonte: microsoft/terminal

Meio Ambiente

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

Passos para reproduzir

Execute no PowerShell:

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

Comportamento esperado

Devo obter uma nova guia dividida duas vezes (três painéis)

Comportamento real

  1. Uma nova janela
    2, três guias
  2. A segunda e a terceira guias contêm erros:
[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

e

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

GAMBIARRA

Acabei descobrindo que, se adicionar um espaço a cada ; , funciona (exceto para # 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

Todos 3 comentários

@Jaykul
Tentei adicionar retorno de carro e alimentação de linha aos separadores de token para análise de linha de comando em meus testes para # 4724. Mas quando tentei executar seu exemplo, descobri que o tique-taque nunca escapa da nova linha, a menos que seja precedido por um espaço. Independentemente do aplicativo que você tenta chamar. Qualquer outro caractere (não apenas o ponto-e-vírgula) diretamente na frente do tique-taque não vai escapar da nova linha no console do PowerShell. Você pode confirmar? Acho que é um problema do PowerShell.
Se você executar seu exemplo de dentro de um shell CMD (newline escapou usando ^ ), ele já funciona mesmo sem ter \ r e \ n como separadores de token no código-fonte do terminal.

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

Na verdade, sim, quando executo o exemplo da edição original, mas coloco espaços na frente dos crases com escape de nova linha, recebo o seguinte:

image

Parece um problema em como o PowerShell lida com novas linhas escapadas.

Você está absolutamente correto. Lamento - eu pretendia apresentar um exemplo puro do PowerShell dessa sintaxe (ou usar echoargs.exe) para saber com certeza o que estava acontecendo e não fiz isso antes de arquivar o problema. Caso ajude nas discussões com outros usuários do PowerShell como eu - que esquecem que o PowerShell faz strings _implied_ - aqui está um exemplo simples do que o PowerShell está fazendo de errado:

Nota: Write-Host aceita qualquer número de parâmetros de strings

image

E, claro, se você passar uma string estranha como essa para um comando "nativo", o PowerShell o envolverá entre aspas:

image

Basicamente, o que acontece é o seguinte:

  1. Por ser um shell, o PowerShell não _require_ aspas em torno dos parâmetros de string.
    2, o PowerShell trata uma nova linha de escape _inside_ uma string de maneira diferente de uma nova linha de escape no final de uma linha de comando (que é a continuação da linha)

Quando não deixamos um espaço entre `; (do qual escapamos, então é apenas uma string) e a nova linha, o PowerShell é obrigado a assumir que é parte de uma string, e não uma linha separada - marca de continuação. Podemos evitar isso separando-o da string _implicitamente_ com um espaço (como fiz na minha "solução alternativa" acima) ou explicitamente, colocando aspas ao redor da string:

wt `
new-tab -p "PowerShell Core" ";"`
split-pane -H -p "Windows PowerShell" ";"`
split-pane -p cmd
Esta página foi útil?
0 / 5 - 0 avaliações