如果终端支持颜色,shell如何检测

时间:2012-09-22 15:54:43

标签: bash colors terminal

  

可能重复:
  Piping data to Linux program which expects a TTY (terminal)

我想显示非交互式脚本的颜色,我需要告诉shell,实际上我的脚本是一个支持颜色的终端,所以像ls --color=auto这样的命令会显示颜色(ls有选项{{ 1}}但我想支持所有支持颜色的posible命令。

我通过python Popen调用我的shell。我试着设置TERM环境变量,但它不起作用。

--color=always

有没有办法告诉bash我是终端?

1 个答案:

答案 0 :(得分:1)

如果有终端连接,程序通常会自动确定(ls --color=auto)。这是通过检查stdout / err文件描述符。

如果您在python中进行管道连接(正如您在上面的示例中所做的那样),程序将其stdout / err连接到管道而不是终端,因此通常不会输出颜色代码。

尝试将进程'stdout / err 直接重定向到附加的终端,而不是回到你的python应用程序。如果这不可行(因为你需要python中的输出 - 但是在这种情况下你通常不需要颜色代码),你将不得不摆弄python以某种方式设置一个伪终端。