Windows build number: Microsoft Windows [Version 10.0.18363.657]
Windows Terminal Version: 0.9.433.0
Ejecute esto en PowerShell:
wt `
new-tab -p PowerShell` Core`;`
split-pane -H -p Windows` PowerShell `;`
split-pane -p cmd
Debería tener una nueva pestaña dividida dos veces (tres paneles)
[error 0x80070002 when launching `
split-pane -H -p "Windows PowerShell"']
y
[error 0x80070002 when launching `
split-pane -H -p "Windows PowerShell"']
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
@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:
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
Y, por supuesto, si pasa una cadena extraña como esa a un comando "nativo", PowerShell lo envuelve entre comillas:
Básicamente, lo que sucede es esto:
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