• mac上R是怎么执行起来的(对shell的考察)?


    目的

    我有两个版本的R, 3.6和4.0. 通过R命令我能执行的是4.0, 我希望能通过R3.6也能执行3.6的. 为此, 我需要考察在执行R的时候, 发生了什么.

    略去过程, 直接说结论.

    总结发现
    • 执行R其实是执行一个shell脚本, 这个脚本主要干了这些事:
      • 设置了一些环境变量, 最重要的是R_HOME_DIR(R_HOME=${R_HOME_DIR}), 其它一些环境变量, 比如下面提到的R_HOME_DIR都是依赖R_HOME的. 而R_HOME=/Library/Frameworks/R.framework/Resources
      • 启动R_binary=" ${R_HOME}/bin/exec$ {R_ARCH}/R". 但如果不经过这个R shell脚本执行是会出错的, 因为它依赖一堆环境变量(之后会说到).
    • 刚刚说R_HOME的这个路径/Library/Frameworks/R.framework/Resources, 其实是一个symlink, 它直接指向的是/Library/Frameworks/R.framework/Versions/Current, 而后者也就是/Library/Frameworks/R.framework/Versions/Current也是一个symlink, 指向的是/Library/Frameworks/R.framework/Versions/4.0/Resouces.
    • 不同版本的R在/Library/Frameworks/R.framework/Versions下, 对每个R, 真实的home目录都是其下(比如Versions/3.6)的Resources文件夹.
    • 3.6和4.0的Resources/bin/R两个文件完全相同. R怎么做到更新中, 能进行最小的改动的, 答案就是symlink.
    • /usr/local/bin/R是个symlink, 指向Resources文件夹下的R, 后者也是symlink, 指向的是home目录下bin目录的R.
    如何才能自由地在3.6与4.0中穿梭呢(虽然我很可能并不需要3.6)?

    很简单. 我想只要再创建一个一模一样的shell脚本, 再改一下R_HOME的路径, 从R_HOME=/Library/Frameworks/R.framework/Resources指向/Library/Frameworks/R.framework/Versions/3.6/Resouces 就可以了. 于是我拷贝了R shell脚本到/usr/local/bin/下, 起名叫3.6

    仅仅只有这些行不一样:

    R_HOME_DIR=/Library/Frameworks/R.framework/Versions/3.6/Resources
    R_SHARE_DIR=${R_HOME}/share # 其实这是等价的, 之前的脚本用的是绝对路径, 我觉得这种写法很丑陋
    R_INCLUDE_DIR=${R_HOME}/include # 同上
    R_DOC_DIR=${R_HOME}/doc # 同上
    

    然后我就也能使用R3.6了(虽然并没有什么用..).

  • 相关阅读:
    pysocketserver
    协程
    py模块和包
    py网络编程
    GridView绑定技巧终结者
    iOS 证书/私钥/代码签名/描述文件
    八拜之交
    POJ3230(Travel)
    POJ2553(The Bottom of a Graph)
    动态规划的实质
  • 原文地址:https://www.cnblogs.com/Tokubara/p/14231442.html
Copyright © 2020-2023  润新知