Ruby 使用rbenv&;rake任务中的bundler,bash外部
我试图使用rbenv(带插件)和bundler来防弹我们的一些rake任务。但是,命令的rbenv填充版本(例如,Ruby 使用rbenv&;rake任务中的bundler,bash外部,ruby,shell,rake,rbenv,Ruby,Shell,Rake,Rbenv,我试图使用rbenv(带插件)和bundler来防弹我们的一些rake任务。但是,命令的rbenv填充版本(例如,bundle)取决于是否首先运行此命令(通常在.bashrc或其等效文件中找到): 这将扩展到shell命令,使rbenv和插件在shell中正常工作。这也意味着在我的机器上的交互式bash shell中正常工作的rake任务通常不会工作,例如从/bin/sh或在另一台机器上调用 我想为rake中的shell调用一次,然后继续使用该shell调用rake中的其他命令。可能吗 如果不是
bundle
)取决于是否首先运行此命令(通常在.bashrc
或其等效文件中找到):
这将扩展到shell命令,使rbenv和插件在shell中正常工作。这也意味着在我的机器上的交互式bash shell中正常工作的rake任务通常不会工作,例如从/bin/sh或在另一台机器上调用
我想为rake中的shell调用一次,然后继续使用该shell调用rake中的其他命令。可能吗
如果不是,我是否可以将一个shell生成的环境变量和shell函数串联复制到后续shell
还是留给我这样的东西
eval "$(rbenv init -)" && other_command
或
(后者似乎也有自己的问题)
我也愿意接受“你做错了”的战略重置,模组躲避rvm和rbenv圣战
更新:
在回答@konsolebox下面的问题时,我可能希望在rake文件中使用的ruby函数可能如下所示:
def rbenv_sh(command)
%x(eval "$(rbenv init -)" && #{command})
end
这将确保
命令
在正确的rbenv上下文中运行,而不依赖于点初始化文件。我只是在寻找比这更好的东西。您可能需要一个脚本来运行其他命令吗
#!/bin/sh
eval "$(rbenv init -)"
other commands
或者,是否希望有一个脚本可以接受要执行的参数:
#!/bin/sh
eval "$(rbenv init -)"
"$@"
你可以作为
sh script.sh other commands
或
如果愿意,甚至可以将该脚本放在/usr/local/bin中,以便使用$PATH进行搜索
根据您自己的喜好,您还可以将eval“$(rbenv init-”
放在~/.profile或~/.bashrc等启动文件中,但我不确定这对其他与ruby无关的应用程序是否安全
更新:
首先将输出存储在变量上如何:
@@rbenv_init = %x(rbenv init -)
def rbenv_sh(command)
%x(#{@@rbenv_init}\n#{command})
end
这与我提到的
&&
选项大致相当吗?按照在每个shell上运行rbenv init
的方法,我可以用ruby fn包装它,例如def rbenv_sh(command)
,并保存额外的脚本文件。很抱歉,我不明白ruby fn有什么帮助。您不是在从shell运行命令吗?或许我不太懂。你能详细说明一下吗?如果eval
运行多个错误时不会快速返回的命令,那么使用&&
不会有太大区别,因为它只会考虑最后一个更改$?
的命令。请注意,&
仅当$?
为0时才执行它前面的命令。@ClayBridges我也提出了一个建议。很好的建议,尽管&
对我来说解析得更好。
sh script.sh other commands
chmod 755 script.sh
./script.sh other commands
@@rbenv_init = %x(rbenv init -)
def rbenv_sh(command)
%x(#{@@rbenv_init}\n#{command})
end