我正在设置一个zsh
shell 环境,我想尝试编写一个简单的函数用于我自己的学习目的:
# ~/.zsh-extensions/conda_which
# get version in conda env
function conda_which {
# this comes from Flament's answer below
readonly env=${1:?"The environment must be specified."}
readonly pkg=${2:?"The package must be specified."}
conda list -n $env | grep $pkg
}
并在我的.zshrc
# ~/.zshrc
# this comes from Terbeck's answer below
fpath=(~/.zsh-extensions/ $fpath)
# this comes from _conda file recommendation for conda autocompletion
fpath+=~/.zsh-extensions/conda-zsh-completion
# this comes from Terbeck's answer below
autoload -U $fpath[1]/*(.:t)
所以现在我可以这样做:
$ conda_which test_env numpy
numpy 1.23.5 py310h5d7c261_0 conda-forge
代替
$ conda list -n test_env | grep numpy
因为我经常忘记它是否是env list
或list env
,这只是一个玩具示例。
conda_which
我面临的问题是损失grep
的颜色突出显示的输出numpy
。我该如何维护这个?
引文:
答案1
Grep 默认没有颜色。相反,颜色可以由用户启用。许多现代 Linux 系统都附带了别名为grep --color
.例如,在我的 Arch 上:
$ type grep
grep is aliased to `grep --color'
现在,GNUgrep
足够聪明,可以检测其输出何时通过管道传输,并且将禁用颜色,除非您使用另一个选项告诉它始终打印彩色输出。从man grep
:
--color[=WHEN], --colour[=WHEN]
Surround the matched (non-empty) strings, matching lines,
context lines, file names, line numbers, byte offsets, and
separators (for fields and groups of context lines) with escape
sequences to display them in color on the terminal. The colors
are defined by the environment variable GREP_COLORS. WHEN is
never, always, or auto.
这info
页面为grep
给出更多细节:
如果标准输出与终端设备关联并且 TERM 环境变量的值表明终端支持颜色,则 WHEN 为“始终”使用颜色,“从不”为不使用颜色,或“自动”为使用颜色。普通 --color 的处理方式类似于 --color=auto;如果没有给出 --color 选项,则默认为 --color=never。
这一切意味着,如果您运行grep
orgrep --color
并且其输出通过管道传输到其他内容,则grep
不会输出颜色代码。要强制执行此操作,您需要使用--col9or=always
.所以,在你的函数中,尝试这样的事情:
conda list -n "$env" | grep --color=always "$pkg"