各ディレクトリのエイリアスを設定するには?

各ディレクトリのエイリアスを設定するには?

エイリアスがありますが、go別のディレクトリで別の操作を実行したいとします。

あるディレクトリでは実行する必要がありますcmd1が、別のディレクトリでは実行する必要があります。cmd2

しかし、上記のディレクトリに切り替えるための別名がすでにありますが、別名にgo別名割り当てを付けることはできますか?foo

alias "foo=cd /path/to/foo"

OSXではbash(?)で動作します。

答え1

何を求めるのか完全にはわかりませんが、エイリアスはエイリアスの内容に拡張されます。別名が 2 つある場合は、別のコマンド、さらに別名も連結できます。

alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"

それ以外の場合は、次のものを使用できます。.bashrc

function go ()
{
    if [ "$PWD" == "/path/to/foo" ]; then
       cmd1
    elif [ "$PWD" == "/path/to/go" ]; then
       cmd2
    fi;
}

より多くのオプションがある場合は、ケース構造を使用する方が良いです。

答え2

次の機能を追加すると.bashrc

function cd () { 
  builtin cd "$@" && [[ -f .aliases ]] && . .aliases
  return 0
}

.aliases ファイルを含むディレクトリに CD を移動するたびに、そのファイルを受け取ります。

他の人がコンピュータにファイルを生成できる場合は注意してください。

このトリックを使用すると、エイリアスは削除されませんが、関数内でコードをいくらでも書くことができます。

オンディル多くのアドオンでこのトリックを使用してください。

http://swapoff.org/ondir.html#download

答え3

私はあなたが非常に「ディレクトリ指向」のような気がします。

(しかし正直に言うと、これは完全に悪い考えだと思います。コマンドはグローバルであることを望みます。)

.bashrc入れるalias go="./.cmd"(次にsource ~/.bashrc)。

次に、各ディレクトリに名前を付けてスクリプトを配置し、.cmd必要な操作を実行します。chmod +x .cmdgo

答え4

私はこれを行う方法を見つけるのに長い時間を費やしましたdirenv

.aliases@teknopaulが提案したように、毎回読むときの問題は、定義を蓄積するがアンロードされないということです。direnvロードして問題を解決しました。そしてアンロード各ディレクトリの環境変数です。しかし、これはただ環境変数しかし、関数で使用することができます!

私のエイリアスは次のとおりですnpm(もちろんエイリアスではありませんが、関数です)。

function npm(){ if [[ -z "$NPMBIN" ]]; then $(which npm) $@; else $NPMBIN $@; fi; }

aliasサブシェルでロジックを実行して上記をtrueに書き換えることもできますが、引用符をエスケープすることに注意する必要があります。

alias npm='bash -c "if [[ -z \"$NPMBIN\" ]]; then $(which npm) $@; else \"$NPMBIN\" $@; fi;"'

関連情報