簡體   English   中英

僅當我從某些終端登錄時禁用 git 顏色

[英]Disabling git colors only when I log in from certain terminals

我希望git在輸出到可以處理顏色的設備時自動對輸出進行着色,而在不能處理時不對其進行着色。 怎么做呢?

背景

我有時會使用機器本身為舊機器開發代碼。 其中一些可以處理 ANSI 顏色,而另一些則不能。 在 UNIX 系統上,我們曾經有一個名為TERMINFO的數據庫,它列出了每個終端的功能。 通過檢查colors功能很容易判斷終端是否支持顏色。 如果它是 -1,那么程序絕對不應該發送 ANSI 顏色序列。

$ tput colors
-1

理想情況下,git 將使用TERMINFO自動檢測 ANSI 顏色序列是否合適。 但它不會並且只檢查isatty() 我懷疑 git 開發人員添加TERMINFO支持並不是一個高優先級,所以我正在尋找任何能夠提供相同功能的解決方法。

我已經知道如何使用git config禁用 git color ,這不是我要問的。 我希望它僅在我從不支持 ANSI 顏色的終端(例如 Digital VT340)登錄時被禁用。

我也已經看到了GIT_CONFIG_PARAMETERS="'color.ui=never'"環境變量,但是根據@bk2204 和@torek,該變量很快就會消失。

變體 1: ~/.bashrc的 shell 函數:

if ! tput colors >/dev/null 2>&1; then
    git() {command git -c color.ui=never "$@"; }
fi

缺點是不能在 shell 腳本中使用。 也就是說,如果你運行一個 shell 腳本, git無論如何都會嘗試使用顏色。 所以變體2:一個shell腳本:

#! /bin/sh
if tput colors >/dev/null 2>&1; then
    exec /usr/bin/git "$@"
else
    exec /usr/bin/git -c color.ui=never "$@"
fi

將腳本命名為git ,使其可執行並放入$PATH /usr/bin之前的目錄中。 例如,我的PATH$HOME/bin:$HOME/.local/bin:/usr/local/bin:/usr/bin:…開頭; 我將個人腳本放入$HOME/bin並將系統范圍的腳本放入/usr/local/bin

為了讓事情更簡單,您可以將腳本命名為gitc類的名稱,刪除/usr/bin/並訓練您的手指輸入gitc而不是git 然后你可以把腳本放在任何地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM