Bash al (alias local) 関数が見つかりません

Bash al (alias local) 関数が見つかりません

ディレクトリにローカルな bash エイリアスを設定できますか?

このようなディレクトリ構造があるとします。

dir1/
  - .
  - ..
  - dir2/
  - file

cd dir1エイリアスがeg機能しない場合は、cd dir1/dir2/そのようなエイリアスが機能します。エイリアスの定義もローカルで、dir1/dir2/

使用事例: 私はプログラマーで、プロジェクトにさまざまなツールを併用しています。そのうちのいくつかにエイリアスを作りたいのですが、そのほとんどはプロジェクト/ディレクトリ特定の。

これを実現する bash コマンドを見たことがありますalが、私の Ubuntu (14.04) には存在しません。

答え1

はい。最も簡単な方法は、各ディレクトリにエイリアスが定義されているファイルを用意することです。たとえば、次のようになります。

$ cat dir1/.alias
alias eg='echo "this is dir1"'
$ cat dir2/.alias
alias eg='echo "this is dir2"'

上記の例では、各ディレクトリにはエイリアスが定義されているというファイルが含まれています.aliasegそのcdうちの1つに、ソースファイルを開くと、エイリアスが使用可能になります。

$ cd dir1 && source .alias
$ eg
This is dir1
$ cd ../dir2 && source .alias
$ eg
This is dir2

これを自動的に実行したい場合は、次の行を追加します~/.bashrc:

## Check if an '.alias' file exists and, if it does, source it. 
PROMPT_COMMAND='[ -e .alias ] && source .alias'

変数PROMPT_COMMANDは、各プロンプトが表示される前に実行されるコマンドを定義します。つまり、実行したコマンドの後に実行されます。つまり、ファイルを含むディレクトリに移動するとすぐに、.aliasこのファイルがソース化されます。

ノート

  • これは安全ではありません。ファイル内のすべてのコード.aliasが実行されます。自己責任で使用してください。手動アプローチの方がはるかに安全です。

  • ファイルで定義されたエイリアスは、.alias同じ名前の別のエイリアス定義によって上書きされるまで、ディレクトリを離れた後も引き続き使用できます。これが問題になる場合は、すべてのエイリアスをクリアしてから、次のようにしてグローバル エイリアスを再ロードできます。

    unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases
    

    簡略化するには、次の行を追加して関数にします~/.bashrc

    clear_aliases(){ 
        unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases; 
    }
    

    clear_aliasesその後、実行してデフォルトをリセットできるようになります。

関連情報