是否有办法能够兼容大部分情况下实现 /bin/bash -c ls 这条命令的色彩输出?
1
saleacy 2022-05-21 02:10:20 +08:00 via Android
| lolcat
|
2
tlmn OP |
3
Buges 2022-05-21 02:53:33 +08:00 via Android
写一个 LD_PRELOAD 的库,覆盖 isatty 这个函数永远返回 1 , 这样程序就会认为输出的是终端,一般就会默认带颜色输出。
|
4
Buges 2022-05-21 02:55:12 +08:00 via Android
关于终端方面的,推荐 这篇文章看一看
https://fasterthanli.me/articles/a-terminal-case-of-linux |
5
julyclyde 2022-05-21 16:13:06 +08:00
本来不支持,你用了外挂让它支持,还抱怨支持的不好?
|
6
zhaoyeye 2022-05-22 02:10:22 +08:00 via Android
为什么要带颜色啊!我就喜欢黑底白字的那种,眼睛舒服
|
9
tlmn OP @zhaoyeye 因为正确的着色可以提高效率,一个简单的例子,你执行 ls 之后,如果没有色彩辅助,如何第一时间判断哪些是目录哪些是文件,以及哪些是可执行文件哪些是正常文件。
|
10
Buges 2022-05-22 14:06:39 +08:00 via Android
|
11
ganymede 2022-05-22 16:42:17 +08:00
试试 vivid A themeable LS_COLORS generator with a rich filetype datebase
https://github.com/sharkdp/vivid |
12
tlmn OP |
13
Buges 2022-05-22 20:57:13 +08:00 via Android
|
19
Buges 2022-05-24 01:39:36 +08:00 via Android
@tlmn --color=auto 的意思是让 ls 命令自动检测输出是否为 tty ,是则带颜色,不是则不带(并且格式也不一样)。
而上面的劫持是强制让程序认为输出目标为 tty 。 常规来说 ls 默认就是--color=auto 的,但也可能你调用的 ls 不是 /usr/bin/ls ,而是 shell 覆盖定义的函数或 alias ,从而自带了一些参数可能改变默认行为。 所以这里显式指定,一方面避免可能的干扰,另一方面更清晰地表达出这个劫持的作用:即欺骗程序对自动颜色输出的检测。 |
21
flynaj 2022-05-27 10:38:14 +08:00
linux 终端的彩色是要程序本身支持才行的。基本上这个功能是调用 libncurses 来实现的。一个是要看程序有没有调用 libncurses ,另外还要看编译的时候有没有把这个功能关了。 很多编译出来的 busybox 为了小巧都是把这个功能关了。
|