[英]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.