【问题标题】:Temporary Environment Variables in RubyRuby 中的临时环境变量
【发布时间】:2014-04-22 23:02:41
【问题描述】:

请多多包涵,因为我对这方面还很陌生,没有太多的编码经验。

我正在尝试使用 ruby​​ 脚本将位置添加到我的 PATH 变量中。到目前为止,我只有

path = ENV['PATH'].to_s

ENV['PATH'] = path + ";" + location

print ENV['PATH']

问题是该文件似乎已添加到 PATH 并与它一起打印,但是当我检查我的路径变量时,新位置不存在。

另外,当我运行一个单独的脚本时:

print ENV['PATH']

新位置也不存在。

我的问题是有没有办法让新的 PATH “保存”而不是在脚本完成后恢复到旧的 PATH?

【问题讨论】:

    标签: ruby-on-rails ruby environment-variables


    【解决方案1】:

    如果我没记错的话,你不能真正编辑环境变量。

    加载脚本时,ruby 会加载所有当前已知的环境变量并将值添加到ENV

    编辑时,只会临时更改为当前执行。

    如果您想更改它并希望它持续存在,您将不得不例如使用system

    system("export PATH=$PATH:YOUR_PATH")
    

    与您在 CLI 中的操作相同

    【讨论】:

    • 好吧,我觉得有道理,windows有类似的功能吗?
    • system() 也临时更改了它,实际上更糟糕的是它只是在system() shell 内部更改它。
    【解决方案2】:

    您能做的最好的事情是生成一个 shell 命令,以便在 Ruby 脚本之外和您正在运行的 shell 内部进行评估。

    这样的事情应该可以工作:

    puts "export PATH=#{ENV['PATH']};#{location}"
    

    然后,在你的 shell 中

    eval $(ruby_script)
    

    但是,由于您似乎想在 Windows 中运行它,您可能希望使用命令替换,在这种情况下您直接输出位置:

    puts location
    

    在 Windows shell 中:

    set PATH=%PATH%;(ruby_script)
    

    【讨论】:

      【解决方案3】:

      冒号“:”是 PATH 的字段分隔符,而不是分号“;”在 Unix 中。今天,当我将分号更改为冒号时,您的示例对我来说效果很好。

      【讨论】:

        猜你喜欢
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 2017-10-11
        • 1970-01-01
        • 2014-09-30
        相关资源
        最近更新 更多