Windows build number: Microsoft Windows [Version 10.0.18363.657]
Windows Terminal Version: 0.9.433.0
Execute no PowerShell:
wt `
new-tab -p PowerShell` Core`;`
split-pane -H -p Windows` PowerShell `;`
split-pane -p cmd
Devo obter uma nova guia dividida duas vezes (três painéis)
[error 0x80070002 when launching `
split-pane -H -p "Windows PowerShell"']
e
[error 0x80070002 when launching `
split-pane -H -p "Windows PowerShell"']
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
@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:
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
E, claro, se você passar uma string estranha como essa para um comando "nativo", o PowerShell o envolverá entre aspas:
Basicamente, o que acontece é o seguinte:
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