web-dev-qa-db-ja.com

ディレクトリごとにエイリアスを設定するにはどうすればよいですか?

エイリアスgoがあるとしますが、別のディレクトリで別のことを実行したいですか?

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

ちなみに、上記のディレクトリに切り替えるためのエイリアスはすでにあるので、goエイリアスにfooエイリアス割り当てを追加することはできますか?

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

OSXのbash(?)で作業します。

18
B Seven

何を要求しているのかは完全にはわかりませんが、エイリアスはエイリアス内のものに展開されます。エイリアスが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;
}

より多くの選択肢がある場合は、ケース構造を使用することをお勧めします。

16
Bernhard

私はあなたが非常に「ディレクトリ指向」であると感じています。その場合、これはあなたの考え方をよりよく満たすかもしれません。

(しかし、正直に言うと、これは全体として悪い考えだと思います。コマンドをグローバルにする必要があります。)

.bashrcalias go="./.cmd"を入力します(次にsource ~/.bashrc)。

次に、そのような各ディレクトリに、.cmd、次にchmod +x .cmd、そしてgoというスクリプトを配置します。

4
Emanuel Berg

私はまさにそれを成し遂げるプロジェクトに取り組んでいます。確認してください: localalias

ここにデモがあります:

enter image description here

面白いことに、私は実際にgoをデモの例として使用しました。ディレクトリの切り替え(デモについて変更が必要なもの)は示していませんが、laコマンドを使用した関数は、実際には、それらが定義されているディレクトリに対してローカルです。

2
Bryan Bugyi
function go() {
  if [ ! -e "./.cmd1" ]
    then command go -a $1
    else command go -b $1
  fi
}

同様のことですが、「go」が特定のディレクトリとは異なる機能が必要なコマンドであると想定します。

1
secondplanet

。bashrcに次の関数を追加すると、

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

.aliasesファイルのあるディレクトリにcdするたびに、ソースが取得されます。

他のユーザーがあなたのマシンでファイルを作成できる場合は、セキュリティに注意してください。

このトリックを使用すると、エイリアスが削除されることはありませんが、関数で好きなだけコードを書くことができます。

ondirはこのトリックを使用し、たくさんのベルとホイッスルを持っています。

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

1
teknopaul