Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
/usr/bin/ruby与rvm_Ruby_Ubuntu_Rvm - Fatal编程技术网

/usr/bin/ruby与rvm

/usr/bin/ruby与rvm,ruby,ubuntu,rvm,Ruby,Ubuntu,Rvm,在经历了最终从我的Ubuntu开发沙箱到强烈推荐的rvm的努力之后,我一定误解了一些基本的东西: 我不想更改所有.rb源文件中的所有shebang行 #!/usr/bin/ruby 进入/usr/local/rvm/bin/ruby或任何特定于版本的内容 我的源文件需要使用系统默认的ruby二进制文件(而不是rvm)与生产服务器上的对应文件保持一致 有什么保持通用代码一致性的建议吗?我是不是应该永远换一次这种发型 #!/usr/bin/env ruby 或者(尽管如此),假设所有冲突的.de

在经历了最终从我的Ubuntu开发沙箱到强烈推荐的rvm的努力之后,我一定误解了一些基本的东西:

我不想更改所有.rb源文件中的所有shebang行

#!/usr/bin/ruby
进入/usr/local/rvm/bin/ruby或任何特定于版本的内容

我的源文件需要使用系统默认的ruby二进制文件(而不是rvm)与生产服务器上的对应文件保持一致

有什么保持通用代码一致性的建议吗?我是不是应该永远换一次这种发型

#!/usr/bin/env ruby

或者(尽管如此),假设所有冲突的.deb包都被删除了,rvm是否有一些干净的方法可以挂接到/usr/bin/ruby?更不用说,如何让其他依赖ruby+libs的.deb包识别非发行版ruby…但这可能是另一个问题。

唯一明智的方法是:

#!/usr/bin/env ruby
它将始终在环境中使用当前选定的ruby,不依赖于任何工具,使用shebang会增加复杂性和一系列安全问题,但它是一种常用的解决方案。一个问题是,它不连接解释器,而是使解释器特定于每个用户的路径值

您可以用符号链接替换
/usr/bin/ruby
。在现代linux上,递归shebang可以工作,/usr/bin/ruby可以是如下脚本:

 #!/bin/sh
 exec /some/other/ruby "$@"

在shebang中使用脚本仅在linux 2.6.20+上受支持,而在OSX上不受支持,链接假设您必须更改ruby以使整个系统运行此脚本-这可能是不可接受的解决方案嗯,是的,递归shebang是有问题的。这对我来说很好,我有一些脚本在cron上运行,让它保持不变很方便