ディレクトリごとにエイリアスを設定する方法は?


18

エイリアスを持っていると仮定しますが、go異なるディレクトリで異なることをしたいですか?

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

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

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

OSXでbash(?)を使用しています。


1
これがmakefileの目的です。
-itsbruce

回答:


16

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

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


4

あなたは非常に「ディレクトリ指向」であると感じます。その場合、これはあなたのメンタリティをより良くするかもしれません。

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

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

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


2
それは多くの作業です...ユースケースは次のとおりです。テストを実行するときに、特定のテストを実行するためにrspec-allのエイリアスを作成します。ただし、どのテストがプロジェクトに依存します。そして、それはディレクトリによって決定されます。
B 7

2
私が見ることができるのは、2つのオプションがあり、1つの関数(上記の@Bernhardなど)を使用するか、ディレクトリに応じて分岐する(ちょうど彼が言ったように)か、ディレクトリにパラメータを置くことができます。考えてみると、スクリプトである必要はありません。touch .TESTNO; echo 2 > .TESTNO各ディレクトリにファイル()を置き、関数内でそのファイルを探し、.TESTNOファイルのテスト番号に従って分岐することができます。含まれています。まったく難しくはありませんが、おそらくこれにエイリアスを使用することはできません。関数を使用する必要があります。
エマニュエルベルク

2

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

デモは次のとおりです。

ここに画像の説明を入力してください

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


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

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


1

次の関数を.bashrcに追加する場合

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

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

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

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

ondirはこのトリックを使用し、たくさんの機能を備えています。

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


これは賢いと思うが、依存しているので危険なようだ.bashrc。(cronたとえば、これは機能しません)。
ctbrown

bashrcについて危険なものがあるかどうかはわかりません。これがエイリアスの標準/正しい場所だと思います。異なるのは環境の性質です。質問をしてください。異なる環境が必要です。cronを同様の環境にしたい場合、cronでユーザー.bashrcを調達するのを止めるものは何もありません。NB cronは、イサティとチャムを使用するため、常にインタラクティブシェルとは異なる動作をすることを期待する必要があります。
teknopaul

確かに、bashrc自体に危険はありません。問題は、ディレクトリに変更するプロセスがbashrcをソースすることを保証する方法がないことです。対話型セッションの場合、それは1つのことです。そのディレクトリが、bashシェルを使用する場合と使用しない場合があるユーザーとプロセス間で共有されている場合、まったく別の問題になります。.bash_aliasesは、一部のシステムでのbashエイリアスの推奨場所です。
ctbrown
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.