【问题标题】:Is it possible to export environment property from ruby script? [duplicate]是否可以从 ruby​​ 脚本中导出环境属性? [复制]
【发布时间】:2012-02-19 17:46:55
【问题描述】:

可能重复:
Exporting an Environment Variable in Ruby

我需要从 ruby​​ 脚本内部设置几个环境属性。

通常,在 bash 中,我会执行以下操作:

$ export SOME_VAR=some_value

但在 ruby​​ 中,以下(显然)不起作用:

irb(main):002:0> `export SOME_VAR=some_value`
(irb):2: command not found: export ASDF=1
=> ""

有办法吗?

【问题讨论】:

  • 这听起来对我来说是倒退的。你想达到什么目的?
  • @JensTinfors 我刚刚在一个 ruby​​ 脚本中使用了它,该脚本生成了一些 shell 命令,其中一个需要设置一个特定的环境变量。如果我在 bash 脚本中执行此操作,我将使用 export,但这不会通过 ruby​​ shell 命令(反引号或系统)起作用。就像答案说的那样,使用 ENV 似乎可以正常工作,所以这对我来说非常有价值。
  • @MaxWilliams 只是您设置的环境变量仅适用于当前进程。向后我的意思是环境属于shell,ruby进程是shell的子进程,明白我的意思吗? :)

标签: ruby bash


【解决方案1】:

根据http://ruby.about.com/od/rubyfeatures/a/envvar.htm,你可以写:

ENV['SOME_VAR'] = 'some_value'

【讨论】:

  • 注意:这将为当前 Ruby 进程以及任何子进程(例如:您使用system 或反引号创建的)设置环境变量。
  • @KyleBurton:是的,绝对是。我假设这正是 OP 想要的,但我可能是错的。
【解决方案2】:

如果您不希望该值在脚本完成后保留,您可以直接更改ENV

ENV['SOME_VAR'] = 'some_value'
puts ENV['SOME_VAR']
# => some_value

如果您确实想要持久性,那么您可能(除此之外)必须将此 var 写入系统上的 ~/.bashrc 或类似文件。

【讨论】:

    【解决方案3】:

    试试 `ENV['SOME_VAR'] = 'some_value'。

    脚本完成后,您无法在执行脚本的环境中使此效果持续存在。

    cmets 中正在讨论我回答的一个技巧,就是从您的 ruby​​ 脚本中将有效的 shell 代码打印到控制台——这不是您需要的,但它可能有用知道它也可以这样工作。

    $ echo "puts 'export foo=bar'" > test.rb
    $ echo $foo
    
    $ source <(ruby test.rb)
    $ echo $foo
    bar
    

    【讨论】:

    • 我真的不认为source ./my_script.rb 可以工作。想想看——你说的是真的,Ruby 脚本必须与现有的 Bash shell 在同一进程中运行,然后,当 Ruby 脚本结束时,该进程必须恢复为Bash 外壳。
    • 在这种情况下,shebang 应该是什么样子?
    • 你可以像这样使用 bash 'source' 程序的输出:source &lt;(./my_script.rb)
    • @KyleBurton:嗯,刚刚试过,没用。我在 mac osx 上。
    • 嗯,是的,那个来源的东西是一个很长的镜头,我的错。
    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2018-04-13
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多