エイリアスがありますが、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 を移動するたびに、そのファイルを受け取ります。
他の人がコンピュータにファイルを生成できる場合は注意してください。
このトリックを使用すると、エイリアスは削除されませんが、関数内でコードをいくらでも書くことができます。
オンディル多くのアドオンでこのトリックを使用してください。
答え3
私はあなたが非常に「ディレクトリ指向」のような気がします。
(しかし正直に言うと、これは完全に悪い考えだと思います。コマンドはグローバルであることを望みます。)
に.bashrc
入れるalias go="./.cmd"
(次にsource ~/.bashrc
)。
次に、各ディレクトリに名前を付けてスクリプトを配置し、.cmd
必要な操作を実行します。chmod +x .cmd
go
答え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;"'