Out-File 和回车 returns
Out-File and carriage returns
如果我有一个程序,例如这个 Go 程序:
package main
import "fmt"
func main() {
fmt.Print("North East\n")
fmt.Print("South West\n")
}
这个程序根本不产生回车 returns,只产生换行符。但是,如果我这样做:
prog.exe > prog.txt
PowerShell 自行为每一行添加回车 returns。我只希望 PowerShell 忠实地输出我的程序创建的内容,仅此而已。所以我尝试了这个:
prog.exe | Out-File -NoNewline prog.txt
并且 PowerShell 没有添加回车 returns,但它继续并删除了换行符。我如何做我想做的事?更新:根据一个答案,这似乎可以做到:
start -rso prog.txt prog.exe
这对我有用。请注意,out-file 默认为 utf16 编码,与 set-content.
"hi`nthere`n" | out-file file -NoNewline
format-hex file
Path: C:\users\admin\foo\file
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 FF FE 68 00 69 00 0A 00 74 00 68 00 65 00 72 00 .þh.i...t.h.e.r.
00000010 65 00 0A 00 e...
好的,我的第一个 Go 程序:
(go run .) -join "`n" | set-content file -NoNewline
问题是 windows 程序输出回车 return 和换行。这可以正常工作,或者 return 不会在 linux 或 osx powershell 中工作。
package main
import "fmt"
func main() {
fmt.Print("North East\r\n")
fmt.Print("South West\r\n")
}
go run . > file
实际上这个问题在 powershell 7 中得到了解决。即使 go 代码没有,文件最终也会有 \r\n。
这似乎是由于重定向输出的行为。只要检测到换行符,它就会分成单独的行,但是当 Powershell 再次加入这些行时,它将同时使用换行符 和 回车符 return (Windows 默认值).
不过,如果您 直接 重定向输出,这应该不是问题。所以这应该会给你预期的行为:
Start-Process prog.exe -RedirectStandardOutput prog.txt
如果我有一个程序,例如这个 Go 程序:
package main
import "fmt"
func main() {
fmt.Print("North East\n")
fmt.Print("South West\n")
}
这个程序根本不产生回车 returns,只产生换行符。但是,如果我这样做:
prog.exe > prog.txt
PowerShell 自行为每一行添加回车 returns。我只希望 PowerShell 忠实地输出我的程序创建的内容,仅此而已。所以我尝试了这个:
prog.exe | Out-File -NoNewline prog.txt
并且 PowerShell 没有添加回车 returns,但它继续并删除了换行符。我如何做我想做的事?更新:根据一个答案,这似乎可以做到:
start -rso prog.txt prog.exe
这对我有用。请注意,out-file 默认为 utf16 编码,与 set-content.
"hi`nthere`n" | out-file file -NoNewline
format-hex file
Path: C:\users\admin\foo\file
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 FF FE 68 00 69 00 0A 00 74 00 68 00 65 00 72 00 .þh.i...t.h.e.r.
00000010 65 00 0A 00 e...
好的,我的第一个 Go 程序:
(go run .) -join "`n" | set-content file -NoNewline
问题是 windows 程序输出回车 return 和换行。这可以正常工作,或者 return 不会在 linux 或 osx powershell 中工作。
package main
import "fmt"
func main() {
fmt.Print("North East\r\n")
fmt.Print("South West\r\n")
}
go run . > file
实际上这个问题在 powershell 7 中得到了解决。即使 go 代码没有,文件最终也会有 \r\n。
这似乎是由于重定向输出的行为。只要检测到换行符,它就会分成单独的行,但是当 Powershell 再次加入这些行时,它将同时使用换行符 和 回车符 return (Windows 默认值).
不过,如果您 直接 重定向输出,这应该不是问题。所以这应该会给你预期的行为:
Start-Process prog.exe -RedirectStandardOutput prog.txt