【发布时间】: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 系统上”。不过真的不值得争论,我们都认为你是正确的,只是在我们有多确定你是正确的方面存在分歧;)