私はシェル環境を設定しており、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
。これをどのように維持しますか?
召喚:
ツイートをサイトに埋め込む~の回答ユーザー定義関数を自動的にロードする方法
@damianflamont~の回答zsh関数にパラメータを渡す方法について
答え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です。
これが意味するのはgrep
or を実行しgrep --color
、その出力が別のものにパイプされるとgrep
カラーコードが出力されないということです。これを強制するにはを使用する必要があります--col9or=always
。したがって、関数で次のようにしてみてください。
conda list -n "$env" | grep --color=always "$pkg"