【问题标题】:Execute commands in a specific shell within Ruby?在 Ruby 中的特定 shell 中执行命令?
【发布时间】:2012-07-26 21:55:02
【问题描述】:

我需要在 Ruby 文件中运行一些命令,而不是在 Bash 中运行它们,因为我在 Unix 上,我想在称为“s3sh”的不同 shell 中运行它们。如何指定外壳?

例如,在我的 Ruby 代码中,我尝试过:

 system "export RUBYSHELL=s3sh"
 s3 = system "RightAws::S3Interface.new(#{S3ID}, #{S3KEY})"
 system "s3.copy(#{SRCBUCKET}, #{FILE}, #{DESTBUCKET}, #{FILE})"
 system "unset RUBYSHELL"

但无法将环境变量导出到运行 Ruby 脚本的 shell。(请参阅“Exporting an Environment Variable in Ruby”)

【问题讨论】:

  • 我很确定 system 在 Unixy 系统上总是使用 /bin/sh,因此您可能必须手动调用 s3sh 并在其 STDIN 上输入必要的命令。
  • @muistooshort documentation 明确表示(system() 始终使用标准外壳,在类 Unix 系统上始终为 /bin/sh)所以你是正确的。 (尽管在这种情况下事情会变得更容易。)
  • @DarshanComputing:system 文档并不明确,它们只是暗示 /bin/sh 将通过引用 exec 来使用。
  • @muistooshort 嗯,对我来说似乎很明确:“传递给标准 shell 的命令行字符串”、“参见标准 shell 的 Kernel.exec”和“标准 shell 总是意味着 @987654332 @ 在类 Unix 系统上”。不过真的不值得争论,我们都认为你是正确的,只是在我们有多确定你是正确的方面存在分歧;)

标签: ruby unix


【解决方案1】:

s3sh 只是 AWS::S3 gem 的包装器,所以你把事情复杂化了。你不需要掏钱;你可以只使用 Ruby:

require 'right_aws'

s3 = RightAws::S3Interface.new(S3ID, S3KEY)
s3.copy(SRCBUCKET, FILE, DESTBUCKET, FILE)

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多