ZSH에서 별칭을 생성하지만 두 번 입력해야 함

ZSH에서 별칭을 생성하지만 두 번 입력해야 함

ZSH에 별칭을 만들려고 합니다.

별칭의 목적은 Python virtualenv를 활성화하는 것입니다.

나는 이미 내 안에 있어요.zshrc

alias SOU="source /home/andykw/.zshrc && source $(setopt extendedglob &&  ls -d .^git/)/bin/activate"

폴더 중 하나에서 가상 환경을 활성화한 후 다른 폴더로 전환하여 다른 가상 환경을 활성화하여 가상 환경을 변경해야 하는 경우가 많습니다.

예: 제가 이 폴더로 작업 중이고 환경을 비활성화 하고 활성화 해야 flask_rest하는 다른 프로젝트에서 작업해야 한다고 가정해 보겠습니다 .django_restflask_restdjango_rest

명령줄을 사용하여 이 작업을 여러 번 수행하는 대신 입력한 source <folder_name>/bin/activate다음 다른 폴더를 사용하기만 하면 됩니다.source <another_folder_name>/bin/activateSOU

문맥이 더 명확해지기를 바랍니다.

추신: 저는 Linux용 Ubuntu와 Windows 하위 시스템을 사용합니다.

답변1

비슷한 것을 원하는 것 같습니다.

SOU() {
  set -o localoptions -o extendedglob
  local f
  for f (~/.zshrc ~/.(^git)/bin/activate(N.)) source $f || return
}

SOU홈 디렉토리 외부의 숨겨진 디렉토리에 있는 파일 및 파일을 가져오는 데 사용됩니다 ( ~/.zshrc나에게는 별 의미가 없는 것 같다는 사실을 무시하고).bin/activate.git

또한 자신이 소유하고 소유자가 읽을 수 있는 파일을 제한하기 위해 U및 한정자를 추가할 수도 있습니다 .r

이는기능하나보다는별명. 별칭은 csh 사용자에게 더 적합합니다. Bourne과 같은 쉘에는 함수와 같은 적절한 프로그래밍 구성이 있지만 별칭을 사용할 때 일부 극단적인 경우에는 여전히 유용할 수 있습니다.하다이것이 텍스트 교체로 처리되기를 바라거나 호출자의 범위에서 별칭을 변경해야 하지만 여기서는 둘 다 해당되지 않는 것 같습니다.

함수 정의를 디렉터리에 배치하거나 ~/.zshrc디렉터리 중 하나에 자동 로드 가능한 함수로 추가할 수 있습니다 $fpath. info zsh autoloading자세히보다.

어떠한 경우에도 조달 ~/.zshrc은 되지 않습니다.실행 취소소스 파일 thosedirs/bin/activate의 역할은 무엇입니까 ? 그건 그저다시 하다다시 무슨 일이 일어나든 ~/.zshrc(이로 인해 발생한 일부 변경 사항이 실행 취소될 수 있지만 bin/activate이는 우연일 수 있음) 해당 변경 사항 중 일부가 추가되면다른 문제.

답변2

원하는 것이 찾을 수 있는 별칭뿐인 경우하나의 ./.*/bin/activate현재 디렉터리 트리에 파일을 저장하고 가져오려면 다음이 필요합니다.

alias SOU='source. */bin/activate'

glob이 .*/bin/activate여러 파일과 일치하는 경우 첫 번째 파일만 가져옵니다. 로그인하지 않은 새 대화형 셸 세션을 열 때마다 파일을 가져와야 하며 ~/.zshrc, 파일을 두 번 이상 가져오고 싶지 않을 것입니다. 명시적으로 가져와야 하는 이유를 이해하기 위해 새로운 질문을 하는 것이 좋습니다.

관련 정보