特定のディレクトリにのみフィッシュシェルエイリアスがあります。

特定のディレクトリにのみフィッシュシェルエイリアスがあります。

私はFishを使用しており、というビルド操作のために頻繁に呼び出されるスクリプトを含むプロジェクトを作業していますx.pyxにマップされるエイリアスを作成したいと思います./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

メッセージが表示されるたびにプロジェクトディレクトリに存在することを確認し、該当する場合にのみ関数を生成します。

funcsavefish_promptディレクトリに「一般」コピーを保存します~/.config/fish/functions。一般的なプロンプト機能に戻るには、それを削除してください。

もちろん、可能であれば最初のオプションを選択してください:-)

おすすめ記事