On Wed, Apr 22, 2015 at 05:31:09PM +0200, Andreas Krey wrote: > On Wed, 22 Apr 2015 08:36:00 +0000, David Rodríguez wrote: > ... > > * User is relying on a custom path to select their Ruby version. For > > example, let's say the first folder in path is "~/.rubies/2.2.2/bin". > > * User runs "/usr/bin/git commit" and a pre-commit hook is triggered. > > * The pre-commit hook starts with "#!/us/bin/env ruby" to select the > > Ruby to be used in the hook, > > Yes...but shouldn't the hook itself know which ruby version it needs? > > After all, if I go into that directory with another ruby setup in my > PATH, the hook should still work, and presumably that requires that > the hook itself selects its version, and not the user's context. More generally, #!/usr/bin/env ruby is saying, "I want whatever ruby the user chooses." If you want a ruby that has certain gems, or certain features (e.g. Array#to_h), then that's not what you want. #!/usr/bin/env ruby is basically only safe if you're willing to accept any potential version that might show up. You can use a multiline shebang[0] if you need to execute shell code to make the decision at runtime, such as if you need to use $HOME in the path to your ruby, or select from multiple different options. [0] http://rosettacode.org/wiki/Multiline_shebang -- brian m. carlson / brian with sandals: Houston, Texas, US +1 832 623 2791 | http://www.crustytoothpaste.net/~bmc | My opinion only OpenPGP: RSA v4 4096b: 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187
Attachment:
signature.asc
Description: Digital signature