![查找 shell 命令的查找算法](https://linux22.com/image/839055/%E6%9F%A5%E6%89%BE%20shell%20%E5%91%BD%E4%BB%A4%E7%9A%84%E6%9F%A5%E6%89%BE%E7%AE%97%E6%B3%95.png)
在我的示例中,我将使用 shell 命令“rake”。
当 rake 被调用时,Ubuntu 使用什么查找顺序来查找要做什么?例如,它是否查找 .bash_profile 中指定的路径,是否查找其他地方,等等。
答案1
我假设您是通过 来安装的rvm
。正如您所说,您的PATH
是通过.bashrc
或 来修改的.bash_profile
。
shell 所做的非常简单,它查看您的命令并用空格将其拆分,然后查找第一个单词(在您的情况下为rake
)。然后它查看PATH
环境变量(使用 查看其值echo $PATH
),其中包含用分号( )分隔的不同目录:
。它用分号将其拆分,然后遍历每个目录以查看是否有您有权执行的文件。当找到它时,shell 将执行它并将其余单词作为参数。
对于rvm
,你应该/home/username/.rvm/rubies/ruby-1.9.3-p374@global/bin
在 中有PATH
。它应该找到一个名为 which 的可执行文件,然后在 中执行rake
一个名为 which 的可执行文件(你的版本可能有所不同)。rake
/home/username/.rvm/gems/ruby-1.9.3-p374@global/gems/rake-10.0.3/bin
/home/username/.rvm/gems/ruby-1.9.3-p374@global/gems/rake-10.0.3/lib/rake.rb