ターミナルを開いて、プロジェクトフォルダに移動します(例:cd /proj/tickecting_app
)。この後、次のコマンドを実行します:rvm use Ruby 1.9.x@gemset
。
ターミナルを開くたびに、このコマンドでこれを実行したいと思います。
これを自動的に実行する方法はありますか?具体的には、別々のタブでさまざまなプロジェクトに移動します。
例えば:
cd /proj/tickecting_app
そして実行rvm use Ruby 1.9.x@gemset
。cd /proj/rss_feed_app
そして実行rvm use Ruby 2.1.x@gemset
。プロジェクトに応じて異なるコマンドを実行したい。これは可能ですか?
RVMを使用している場合は、.rvmrc
という名前のファイルを次の内容でプロジェクトディレクトリに配置するだけです。
rvm use Ruby 1.9.x@gemset
2番目のプロジェクトでも同じですが、rvm
呼び出しを変更するだけです。
エイリアスはあなたに役立つことができます。特定のディレクトリおよび実行する必要のあるコマンドごとにalias
を作成できます。したがって、あなたが与えた2つの例では、次のようになります。
alias ticketapp='cd /proj/tickecting_app && rvm use Ruby 1.9.x@gemset'
alias feedapp='cd /proj/rss_feed_app && rvm use Ruby 2.1.x@gemset'
したがって、次回はalias
を指定するだけで済みます(上記の場合はcd
も指定する必要はありません)。つまり、ticketapp
とfeedapp
です。
エイリアスを永続的にするには、次のようにします。
vim〜/.bashrc
そして、それらのエイリアスコマンドをそのまま.bashrc
ファイルに入れます。
[mikeserv@localhost ~]$ PS1=$PS1'$(
[ ${last_hist=\!} -ne \! ] && {
h=$(history 1)
[ -n "${h#"${h##* cd *}"}" ] &&
. ./.dircmd >&2 2>/dev/null
})${0##*["$0"$((last_hist=\!))]*}'
[mikeserv@localhost ~]$ cd .
[mikeserv@localhost ~]$
[mikeserv@localhost ~]$ echo
[mikeserv@localhost ~]$ cat <<\DIRCMD >.dircmd
echo this is my home directory
> DIRCMD
[mikeserv@localhost ~]$
[mikeserv@localhost ~]$ echo
[mikeserv@localhost ~]$ cd .
this is my home directory
[mikeserv@localhost ~]$
そのようなものはPOSIXシステムで機能するはずです-私はbash
だけがそのような!bangの前に\ backslashを必要とすると思います。 bash
は、fc
(移植可能)では機能しない方法で履歴を更新しているようですが、history
では機能します。他のシェルでは、history 1
ビットはfc -l -1
と交換可能である必要がありますが、bash
はコマンドの背後にあると思います。かなりイライラしました。
とにかく、プロンプトが描画されるたびに、変数$last_hist
が最後のコマンドの履歴番号として定義されます。これは、プロンプトに表示されないように常に何にも等しくないパラメーター置換の一致フィールドで行われます。
fc
チェックは、最後の履歴番号が実際にインクリメントされていることを確認するだけです。たとえば、Enterキーを押しただけではありません。また、最後のコマンドがcd
であったことも確認します。両方が真の場合、.
という名前の現在のディレクトリにあるファイルを.dircmd
ソースしようとします。存在する場合は実行されます。そうでなければ、まあ。