1 回答

TA貢獻1890條經(jīng)驗 獲得超9個贊
Bash有一個“神奇的行為”,如果你輸入“l(fā)s”,通常你會得到彩色的輸出,但如果你將輸出重定向到一個文件,顏色代碼就會消失。
這不是 Bash 功能,而是 ls 功能。它調(diào)用 isatty() 來檢查標準文件描述符是否引用了終端。在 musl libc 中,isatty 是這樣實現(xiàn)的:
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 關(guān)注
- 82 瀏覽
添加回答
舉報