我打开终端并导航到我的项目文件夹(例如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
。
我想根据项目运行不同的命令。这可能吗?
答案1
.rvmrc
如果您使用 RVM,那么只需在项目目录中放置一个名为以下内容的文件即可:
rvm use ruby 1.9.x@gemset
对于您的第二个项目,它是相同的,只需更改调用即可rvm
。
答案2
别名可能对您有用。您可以alias
为每个特定目录和需要运行的命令创建。因此,对于您给出的两个示例,它将是:
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
) ieticketapp
和feedapp
在上面的情况下。
要使您的别名永久存在,只需:
vim ~/.bashrc
并按原样在.bashrc
文件中给出这些别名命令。
答案3
[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 之前的 \ 反斜杠。bash
似乎也以一种不适用的方式更新历史记录fc
- 这是可移植的 - 但确实适用于history
.在其他 shell 中,该history 1
位应该可以互换,fc -l -1
但bash
我猜它是后面的命令。这真是令人沮丧。
无论如何,每次绘制提示时,都会将变量定义$last_hist
为最后一个命令的历史编号。它在参数替换的匹配字段中执行此操作,该参数替换始终不等于任何内容,因此不会在提示中显示。
检查fc
只是确保最后的历史记录数字实际增加 - 例如,您不只是按回车键或其他什么。它还检查最后一个命令是否是cd
.如果两者都为 true,它将尝试.
在当前目录中获取名为 的文件.dircmd
。如果存在则运行。如果没有,哦,好吧。