Terminal: wt no maneja las nuevas líneas correctamente

Creado en 16 feb. 2020  ·  3Comentarios  ·  Fuente: microsoft/terminal

Ambiente

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

pasos para reproducir

Ejecute esto en PowerShell:

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

Comportamiento esperado

Debería tener una nueva pestaña dividida dos veces (tres paneles)

Comportamiento real

  1. Una nueva ventana
    2, tres pestañas
  2. Las pestañas segunda y tercera tienen errores:
[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

y

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

SOLUCIÓN ALTERNA

Finalmente descubrí que si agrego un espacio después de cada ; entonces funciona (excepto 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 comentarios

@Jaykul
Intenté agregar retorno de carro y avance de línea a los separadores de tokens para el análisis de línea de comando en mis pruebas para # 4724. Pero cuando intenté ejecutar su ejemplo, resultó que la marca de retroceso nunca escapa de la nueva línea a menos que esté precedida por un espacio. Independientemente de la aplicación a la que intente llamar. Cualquier otro carácter (no solo el punto y coma) directamente delante de la marca de verificación no activará el escape de la nueva línea en la consola de PowerShell. ¿Puedes confirmar? Supongo que es más bien un problema de PowerShell.
Si ejecuta su ejemplo desde dentro de un shell CMD (la nueva línea se escapó usando ^ ), ya funciona incluso sin tener \ r y \ n como separadores de tokens en el código fuente del terminal.

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

En realidad, sí, cuando ejecuto el ejemplo del problema original pero pongo espacios delante de las comillas invertidas que escapan de la nueva línea, obtengo esto:

image

Parece un problema en la forma en que PowerShell maneja las nuevas líneas de escape.

Estás absolutamente en lo correcto. Lo siento, tenía la intención de encontrar un ejemplo de PowerShell puro de esa sintaxis (o usar echoargs.exe) para poder saber con certeza lo que estaba pasando, y no lo hice antes de presentar el problema. En caso de que ayude con las discusiones con otros usuarios de PowerShell como yo, que olvidan que PowerShell tiene cadenas _implied_, aquí hay un ejemplo simple de lo que PowerShell está haciendo mal:

Nota: Write-Host toma cualquier número de parámetros de cadenas

image

Y, por supuesto, si pasa una cadena extraña como esa a un comando "nativo", PowerShell lo envuelve entre comillas:

image

Básicamente, lo que sucede es esto:

  1. Debido a que es un shell, PowerShell no _requiere_ comillas alrededor de los parámetros de cadena.
    2, PowerShell trata una nueva línea escapada _ dentro_ de una cadena de manera diferente a una nueva línea escapada al final de una línea de comando (que es la continuación de la línea)

Cuando no dejamos un espacio entre `; (que hemos escapado, por lo que es solo una cadena) y la nueva línea, PowerShell está obligado a asumir que es parte de una cadena y no una línea separada. -Marca de continuación. Podemos evitar esto separándolo de la cadena _ implícitamente_ con un espacio (como hice en mi "solución" anterior), o explícitamente, poniendo comillas alrededor de la cadena:

wt `
new-tab -p "PowerShell Core" ";"`
split-pane -H -p "Windows PowerShell" ";"`
split-pane -p cmd
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

mrmlnc picture mrmlnc  ·  3Comentarios

alabuzhev picture alabuzhev  ·  3Comentarios

ghost picture ghost  ·  3Comentarios

NickITGuy picture NickITGuy  ·  3Comentarios

zadjii-msft picture zadjii-msft  ·  3Comentarios