私はFishを使用しており、というビルド操作のために頻繁に呼び出されるスクリプトを含むプロジェクトを作業していますx.py
。x
にマップされるエイリアスを作成したいと思います./x.py
。しかし、私はこれがその特定のディレクトリでのみ機能したいと思います。
Fishドキュメントは、さまざまなエイリアス/関数/などを生成する方法の非常に詳細な説明を提供しますが、それをディレクトリごとに作成する方法については何も見つかりません。
どんな助けでも大変感謝します。
ベストアンサー1
私が考える可能性は3つあります(Damielが提案したものに加えて)。まず、可能であれば、「遅延ロード」機能のディレクトリにあるかどうかをテストします。これはDamirが提案したものと似ていますが、起動設定や実行可能スクリプトのオーバーヘッドを防ぎます。
遅延ローディング機能ベースのソリューション
作る~/.config/fish/functions/x.fish
:
function x
if [ (pwd) = "/path/to/project` ]
./x.py
else
command x
end
end
この関数は最初に呼び出されたときにのみロードされますx
。これにより、実行構成に追加するオーバーヘッドが防止されます。これはまだ関数なので、fish
実行可能スクリプトのように新しいシェルを起動するのではなく、現在のシェルで実行されます。
x
そのディレクトリにない場合は、システムにインストールされている他のコマンドに置き換えられます。必要でない場合は、else
ブロックを削除してください。
プロジェクトディレクトリに入ったときに生成される関数
もしあなたなら本物この機能は、そのディレクトリにある場合にのみ必要で、2つのオプションがあります。まず、fish関数は変数の変更を監視し、変数が変更されたときにのみ実行できます。この変数は、$PWD
ディレクトリの変更を監視するために使用できます。
以下を追加してください~/.config/fish/conf.d/create_x.fish
。
function create_x --on-variable PWD
if [ "$PWD" = "/path/to/project" ]
function x
./x.py
end
else
functions --erase x
end
end
create_x.fish
起動時に関数をロードする必要がありますが、ディレクトリを変更した場合にのみ実行されます。確かに、最初のオプションよりも効率が悪くなります。
プロンプトベースの機能
最後に、プロンプト機能を変更して現在のディレクトリを確認できます。これは無駄なように見えますが、次のようになります。
funced fish_prompt
下部に以下を追加します。
functions --erase x if [ (pwd) = "/path/to/project" ] function x ./x.py end end
funcsave fish_prompt
メッセージが表示されるたびにプロジェクトディレクトリに存在することを確認し、該当する場合にのみ関数を生成します。
funcsave
fish_prompt
ディレクトリに「一般」コピーを保存します~/.config/fish/functions
。一般的なプロンプト機能に戻るには、それを削除してください。
もちろん、可能であれば最初のオプションを選択してください:-)