注意如果代码清单中既显示了输入命令,也显示了输出内容,输入命令会以粗体显示并以$作为起始,以此同输出内容区分开来。
输出中的各个目录之间以冒号分隔。当需要运行程序或命令时,bash会检查所有这些目录。如果命令没有在其中,bash就无法执行。另外要注意的是,bash是以这些目录在PATH中出现的顺序依次检查的。顺序在这里很重要,如果有两个同名的命令分别位于PATH中两个不同的目录中,可能会由于目录出现的先后顺序产生不同的结果。如果在查找特定命令时碰到了麻烦,可以用which命令查看待查找命令在PATH中的位置,如代码清单0-2所示。
代码清单0-2使用which在PATH中查找命令
$ which ruby
/Users/bperry/.rvm/rubies/ruby-2.1.5/bin/ruby
$ which echo
/bin/echo
知道了这些信息,你可以把需要测试的文件移动或复制到echo $PATH所列出的某个目录中(如代码清单0-1所示),然后就能执行命令了。本文中使用了which来确定命令的完整路径。在调试有问题的PATH环境变量时,which是一个有用的工具。
配置登录脚本
我们会编写一些随后用于其他脚本中的脚本,因此能够轻松调用新脚本就显得很重要了。你可以配置PATH环境变量,使得在启动新的命令shell时,可以像其他命令那样自动调用定制脚本。新命令shell启动后的第一件事是读取用户主目录(在OS X和Linux中分别是/Users/和/home/)中的登录脚本并执行其中的定制命令。根据你所用的系统,登录脚本可以是.login、.profile、.bashrc或.bash_profile。要想知道具体是哪个,像下面这样在这些文件中各加入一行:
echo this is .profile
将最后一个单词调整为对应的文件名,然后登录。这行内容应该会出现在终端窗口顶端,指明登录时运行的是哪个脚本。如果你打开终端,看到的是this is.profile,那么说明你的shell环境载入的是.profile文件;如果看到的是this is.bashrc,则说明是.bashrc文件,以此类推。依赖于你所用的shell,这种行为也会有变化。
你可以修改登录脚本,让它帮助在PATH变量中加入其他目录。另外也可以在登录脚本中完成其他bash设置,例如修改bash提示符外观、定制PATH等。让我们用cat命令来看一个定制好的.bashrc登录脚本。cat命令接受文件名作为参数,然后将文件内容输出到控制台屏幕,如代码清单0-3所示。
代码清单0-3定制过的.bashrc文件,其中将RVM加入了PATH
$ cat ~/.bashrc
export PATH="$PATH:$HOME/.rvm/bin" # 将RVM添加到PATH中。
该代码显示出了.bashrc文件的内容,可以看到PATH获得了一个新的值,允许本地RVM (Ruby version managershell脚本编程实例,Ruby版本管理器)管理已安装的各种Ruby版本。因为.bashrc在每次启动新的命令shell时都会设置PATH,所以RVM在系统中总是默认可用。
你可以用类似的方法让自己的shell脚本也默认可用。首先,在主目录中创建一个开发目录,将编写的所有脚本都保存到这个目录。然后在登录脚本中将该目录添加到PATH变量中,这样就可以更方便地引用新写的脚本了。
命令echo $HOME可以在终端中打印出主目录的路径。进入主目录,然后创建开发目录(建议将其命名为scripts)。接着用文本编辑器打开登录脚本,在脚本顶端添加以下代码(把/path/to/scripts/替换成开发目录的具体路径),将开发目录加入PATH。