履歴コマンドを実行したときに自動的にパスを変更しますか?

履歴コマンドを実行したときに自動的にパスを変更しますか?

数日前に実行されたコマンドを見つけるために再帰検索を実行し、それを実行したいと思います。ただし、現在実行中のパスではなく、以前に実行していたパスでコマンドを実行する必要があります。

zshこの問題を解決してコマンドをフルパスに変更した後、現在のパスで実行できますか?または、プロセスを分岐して元のパスに切り替えて実行してから返しますか?

答え1

コマンドが実行された元のディレクトリは履歴に書き込まれません。

実行するコマンド名が見つからない場合に実行されるフックを設定できます。command_not_found_handler。しかし、当時の仕事についてよく理解していなければ、それまでは大きな助けにはなりません。

関連読書:zsh 履歴 - フルパス;ワイルドカードの拡張方法をシェル履歴に記録できますか?

答え2

ほとんどの場合、これは実際には望ましくない動作です。通常、コマンドを再実行するときは、現在のコンテキストでコマンドを実行します。履歴コマンドを実行して現在のフォルダ以外の項目に対して機能させると、予期しない副作用が発生する可能性があります。

私は別のアプローチを提案します。まず、特定の場所で具体的にどのコマンドを実行する必要があるのか​​を特定してから、なぜそうするのかをアドバイスし、標準モードを使用して修正します。

  • 実行可能ファイルに関連付けられているパスのリソースからライブラリをロードする必要がある場合などを使用して、dirnameそのリソースが見つかる場所を知るように変更してください$0

  • データが必要な場合は、関連していないデータを再利用できるように見つけることができる場所を示すパラメータを渡すことをお勧めします。

  • 問題の原因を解決できない場合は、小さなシェル関数やラッパースクリプトを作成して、システムで発生するすべての操作とは無関係に実行可能ファイル環境を設定することを検討してください。

関連情報