ディレクトリにローカルな 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"'
上記の例では、各ディレクトリにはエイリアスが定義されているというファイルが含まれています.alias
。eg
その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
その後、実行してデフォルトをリセットできるようになります。