新手问题 which ruby

cbdfocus · 2015年07月29日 · 最后由 cbdfocus 回复于 2015年08月04日 · 2570 次阅读

不是语言的问题,UNIX 基础不行,烦各位耐心啦

CBD-MBP:~ baodong$ which irb
/usr/local/bin/irb
CBD-MBP:~ baodong$ which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python

问题:

  1. 当我在 terminal 里键入『irb』的时候,mac 是怎么一步步找到我要执行的文件的?
  2. 为何 ruby 要单独有个 irb 的命令,而不像 Python 那样

楼主输入一下 echo $PATH 看看出来什么

$PATH 是一个 Unix shell 下面的环境变量,里面存储了一个路径列表,当你在 shell 里面输入一个命令,系统就会在这个列表里面的所有路径里查找这个命令,找到了就执行。

至于为什么要单独的 irb 命令,那是因为 Ruby 更接近 Unix 的指导思想之 Do one thing and do it well (lol 其实只是在吹牛,语言实现细节上的小差异而已)

不只是 macos 所有系统都有个环境变量 path,系统就从这里找可运行的文件。非 windows 系统下,就是你文件属性里有 x 的

#1 楼 @blacktulip 那是不是根据所列出的 PATH 的先后顺序来查找呢?从$PATH 看,我机器上 python3 的顺序在 python2 的前面,系统默认查找的是 python2,这是为什么呢?

shell: $PATH
Ruby: $LOAD_PATH

他们的用途好像啊

#4 楼 @blacktulip

-bash: /usr/local/sbin:/Users/baodong/__DEV__/android-ndk-r10e:/Users/baodong/__DEV__/apache-ant-1.9.5/bin:/Users/baodong/Library/Android/sdk/tools:/Users/baodong/Library/Android/sdk/platform-tools:/Users/baodong/Library/Android/sdk:/Users/baodong/__DEV__/cocos2d-x-3.6/templates:/Users/baodong/__DEV__/cocos2d-x-3.6/tools/cocos2d-console/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/php5-5.6.6-20150220-225050/bin:/Users/baodong/.composer/vendor/bin:/opt/local/bin:/opt/local/sbin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/Applications/adt-bundle-mac-x86_64-20131030/sdk/platform-tools:/Users/baodong/__DEV__/apache-ant-1.9.5/bin:/Users/baodong/Library/Android/sdk/bin:/Users/baodong/__DEV__/android-ndk-r10e:/Users/baodong/.rvm/bin:/Users/baodong/.rvm/bin: No such file or directory

#4 楼 @blacktulip

因为机器上同时有 2.7 和 3.4,搞不清 python,python3,pip,pip3,这些命令是怎么地快捷方式?看起来不像是普通的软链接

需要 登录 后方可回复, 如果你还没有账号请 注册新账号