저는 쉘 환경을 설정 중이며 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
. 이것을 어떻게 유지하나요?
소환:
@FrankTerbeck~의답변사용자 정의 함수를 자동으로 로드하는 방법
@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"