ZSHでエイリアスを生成しますが、2回入力する必要があります

ZSHでエイリアスを生成しますが、2回入力する必要があります

ZSHにエイリアスを作成しようとしています。

エイリアスの目的は、Python virtualenvを有効にすることです。

私はすでに私の中にいます。.zshrc

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

フォルダの1つで仮想環境を有効にした後、別のフォルダに切り替えて別の仮想環境を有効にして仮想環境を変更する必要があることがよくあります。

例:私はこのフォルダで作業しており、環境を無効にして有効にする必要があるflask_rest他のプロジェクトで作業する必要があるとします。django_restflask_restdjango_rest

コマンドラインを使用してこれを複数回実行するのではなく、入力してからsource <folder_name>/bin/activate別のフォルダを使用するだけです。source <another_folder_name>/bin/activateSOU

文脈がより明確になることを願っています。

PS:私は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ディレクトリの1つに自動ロード可能な関数として追加したりできます$fpathinfo zsh autoloading詳細より。

いかなる場合でも調達~/.zshrcはできません。元に戻すソースファイルthosedirs/bin/activateの役割は何ですか?それはただやり直す何が起こったかにかかわらず~/.zshrc(これによって発生したいくつかの変更は元に戻されるかもしれませんが、bin/activateこれは偶然かもしれません)、その変更のいくつかが追加された場合その他の問題

答え2

欲しいものが見つかるエイリアスだけの場合一つ ./.*/bin/activate現在のディレクトリツリーにファイルを保存してインポートするには、次のものが必要です。

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

globが.*/bin/activate複数のファイルと一致する場合は、最初のファイルのみをインポートします。ログインしていない新しいインタラクティブシェルセッションを開くたびにファイルをインポートする必要があり~/.zshrc、ファイルを複数回インポートしたくありません。明示的にインポートする理由を理解するために新しい質問をすることをお勧めします。

関連情報