カスタムzsh機能を使用してカラー出力を保存するには?

カスタムzsh機能を使用してカラー出力を保存するには?

私はシェル環境を設定しており、zsh学習目的で簡単な関数を作成したいと思いました。

# ~/.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'

GNUは、grep出力がパイプされるタイミングを検出するのに十分スマートであり、常にカラー出力を印刷するように指示する他のオプションを使用しない限り、カラーを無効にします。から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は色を使用する場合は「always」、色を使用しない場合は「never」、色を使用する場合「auto」です。通常の --color は --color=auto と同様に扱われます。 --colorオプションが指定されていない場合、デフォルトは--color = neverです。

これが意味するのはgrepor を実行しgrep --color、その出力が別のものにパイプされるとgrepカラーコードが出力されないということです。これを強制するにはを使用する必要があります--col9or=always。したがって、関数で次のようにしてみてください。

conda list -n "$env" | grep --color=always "$pkg"

関連情報