1 回答

TA贡献1890条经验 获得超9个赞
Bash有一个“神奇的行为”,如果你输入“ls”,通常你会得到彩色的输出,但如果你将输出重定向到一个文件,颜色代码就会消失。
这不是 Bash 功能,而是 ls 功能。它调用 isatty() 来检查标准文件描述符是否引用了终端。在 musl libc 中,isatty 是这样实现的:
int isatty(int fd)
{
struct winsize wsz;
unsigned long r = syscall(SYS_ioctl, fd, TIOCGWINSZ, &wsz);
if (r == 0) return 1;
if (errno != EBADF) errno = ENOTTY;
return 0;
}
您可以在 Go 中使用相同的方法:
package main
import (
"fmt"
"os"
"golang.org/x/sys/unix"
)
func main() {
_, err := unix.IoctlGetWinsize(int(os.Stdout.Fd()), unix.TIOCGWINSZ)
if err != nil {
fmt.Println("Hello World")
} else {
fmt.Println("\033[1;34mHello World!\033[0m")
}
}
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报