Terminal: wt无法正确处理换行符

创建于 2020-02-16  ·  3评论  ·  资料来源: microsoft/terminal

环境

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

重现步骤

在PowerShell中运行此命令:

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

预期行为

我应该将新标签分两次(三个窗格)

实际行为

  1. 新视窗
    2,三个标签
  2. 第二个和第三个选项卡中有错误:
[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

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

解决方法

我最终发现,如果我在每个;之后添加一个空格,那么它将起作用(#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

所有3条评论

@杰库
在#4724的测试中,我尝试将回车符和换行符添加到令牌分隔符以进行命令行解析。 但是,当我尝试运行您的示例时,事实证明,除非在前面加上空格,否则反斜线永远不会逸出新行。 无论您尝试调用哪个应用程序,都可以。 直接位于反勾前面的任何其他字符(不仅是分号)都不会触发在PowerShell控制台中转义新行。 你可否确认? 我这是一个PowerShell问题。
如果从CMD shell(使用^转义换行符)中运行示例,即使在终端源代码中没有使用\ r和\ n作为标记分隔符,该示例也已经可以使用。

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

是的,实际上,当我从原始问题运行示例但在换行符转引号前面放置空格时,我得到以下信息:

image

看起来像Powershell如何处理转义的换行符。

你是绝对正确的。 对不起,我想拿出一个纯PowerShell语法示例(或使用echoargs.exe),以便我可以确定发生了什么,并且在提出问题之前没有这样做。 如果这将有助于与其他像我这样的PowerShell用户进行讨论-他们忘记了PowerShell会_implied_字符串-这是PowerShell做错事情的一个简单示例:

注意:Write-Host接受任意数量的字符串参数

image

当然,如果您将类似的奇怪字符串传递给“本机”命令,PowerShell会将其用引号引起来:

image

基本上,这是什么情况:

  1. 因为它是外壳,所以PowerShell不会在字符串参数周围使用_require_引号。
    2,PowerShell将转义的换行符_inside_与字符串末尾的转义的换行符不同(字符串是行的延续)对待

当我们在`; (我们已经转义,所以只是一个字符串)和换行符之间不留空格时,PowerShell必须假定它是字符串的一部分,而不是单独的行-继续标记。 我们可以通过将其与字符串_implicitly_隔开一个空格(就像我在上面的“变通方法”中所做的那样),或者通过在字符串两边加上引号来避免这种情况:

wt `
new-tab -p "PowerShell Core" ";"`
split-pane -H -p "Windows PowerShell" ";"`
split-pane -p cmd
此页面是否有帮助?
0 / 5 - 0 等级