2012-03-06 50 views
0

これは、ディレクトリの.htaccessと似ています。bashのrcファイルを再帰的に上書きする

私は、次のしている:

ファイル:〜/ .myapprc

APP_USER=alagu 
APP_DOMAIN=goyaka.com 

ファイル:〜/ testappと/ .myapprc

APP_USER=alagu_test 
APP_DOMAIN=localhost 

私が欲しい:

[[email protected]~ ]$ echo $APP_USER 
alagu 

[[email protected]~ ]$ cd ~/testapp 
[[email protected]~ ]$ echo $APP_USER 
alagu_test 

どうすればいいですか?

答えて

2

あなたは上書きされますあなたの.bashrcで関数を作成することができますcdコマンド:

cd() { 
    # "[email protected]" to preserve quoting/whitespace 
    builtin cd "[email protected]" 
    [ -f ".myapprc" ] && source .myapprc 
} 
+0

クォートの問題を回避するには、 '' $ * "'の代わりに '' @ @ ''を使用します。 –

3

ディレクトリを変更するたびに、.myapprcをソースにしたいようです。

私が考えることができる2つの方法があります:PROMPT_COMMANDDEBUGトラップです。

は、最初にこれを行うには、一度、以下を実行したい:ので、もし、これらがすべてのプロンプトに一度ファイルをソースします

trap "[ -f .myapprc ] && . .myapprc" DEBUG 

PROMPT_COMMAND="[ -f .myapprc ] && . .myapprc" 

と第二にそのファイルを入手することは費用がかかります。$PWDが変更されたかどうかを確認するためにファイルを拡張することができます。

またcdをオーバーライドすることができますが、これは、いくつかのシェルスクリプトを破ることがあります。

alias cd=cd_ 
function cd_ 
{ 
    \cd "[email protected]" 
    local ret=$? 
    [ -f .myapprc ] && . .myapprc 
    return $ret 
} 

しかし、これらのいずれかを行うと、本当に良いアイデアではありません - 「hey'reすべての巨大なセキュリティホールますので、あなたの現在の作業ディレクトリが何であれ、どんなコマンドでも.myapprcが実行されます。ヨアヒムため


後期編集 - ソリューションは、以下で.myapprcの過度の実行を回避することができPROMPT_COMMAND/trapでこれを使用します。 PROMPT_COMMAND='if [ -f .myapprc -a "$PWD" != "$PWDLAST" ]; then PWDLAST="$PWD"; source .myapprc; fi'


+1

セキュリティリスクに言及すると+1 –

1

direnvを使用して作業ディレクトリに基づいて環境をカスタマイズすることができます。それはhttp://direnv.netです。

+0

サイトがダウンしています。 – Alagu

+0

githubに移動したように見えます。お試しくださいhttps://github.com/zimbatm/direnv – rlduffy

関連する問題