我可以让 powershell 像 Ubuntu 中的 Bash 一样正确复制多行文本吗?

我可以让 powershell 像 Ubuntu 中的 Bash 一样正确复制多行文本吗?

我在家里使用 Ubuntu VM 进行 Rails 开发,Bash 有点让我习惯了。当我从 Bash 复制多行文本时,它似乎能够很好地识别出复制的文本是单行还是多行。

在 Win7 上的 Powershell(托管在 Console2 中)中,我没有遇到此行为。请注意此错误消息中 HRESULT 是如何一分为二的(向右滚动):

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1558,9): warning MSB3284: Cannot get the file
path for type library "fdca4b6c-605a-4b76-adce-68010c4a2581" version 4.0. Library not registered. (Exception from HRESU
LT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)) [C:\Dev\Foo.csproj]

有没有办法让 Powershell 知道它不应该将单词减半?此行为仅在 Bash 中可用,我应该在 Windows 中使用 Bash(也许是 CygWin)吗?

答案1

我知道这不能解决直接复制已经打印到控制台的文本的问题,但一个选项是将输出通过管道传输到以Out-String -Width <columns>防止长行换行。然后将输出通过管道传输到以clip.exe将其复制到剪贴板。

例如,如果我输入了无效命令并收到一条我想要复制的错误消息:

PS> Blah
The term 'Blah' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is
correct and try again.
At line:1 char:1
+ Blah
+ ~~~~
    + CategoryInfo          : ObjectNotFound: (Blah:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

我可以使用以下方式获取最后一条错误消息$Error[0]

$Error[0]| Out-String -Width 10000| clip.exe

这是我粘贴到记事本中得到的结果(注意第一行没有换行)。

The term 'Blah' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ Blah
+ ~~~~
    + CategoryInfo          : ObjectNotFound: (Blah:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

答案2

Powershell 的复制行为是基于块的,而不是基于行的,不幸的是它无法将换行的行重新链接在一起。但是,虽然我确实喜欢用 bash(和 fish)来编写脚本,但 Powershell 与 Windows 服务和服务器的深度集成使其成为更合适的 shell,尽管它的界面功能较弱。也许其他人知道 Powershell 的替代品,它保留了与 Windows 对象的集成,但也有更好的界面;我不知道。

相关内容