Merge pull request #883 from sheenobu/bugfix/ruby_shebang
Workaround to support ruby as an interpreter
This commit is contained in:
		
						commit
						80f739b571
					
				
					 1 changed files with 20 additions and 6 deletions
				
			
		|  | @ -184,17 +184,31 @@ for (my $n = 0; $n < scalar @ARGV; $n++) { | |||
|         $n++; | ||||
|         die "$0: ‘$arg’ requires an argument\n" unless $n < scalar @ARGV; | ||||
|         my $interpreter = $ARGV[$n]; | ||||
|         # Überhack to support Perl. Perl examines the shebang and | ||||
|         # executes it unless it contains the string "perl" or "indir", | ||||
|         # or (undocumented) argv[0] does not contain "perl". Exploit | ||||
|         # the latter by doing "exec -a". | ||||
|         my $execArgs = $interpreter =~ /perl/ ? "-a PERL" : ""; | ||||
|         my $execArgs = ""; | ||||
| 
 | ||||
|         sub shellEscape { | ||||
|             my $s = $_; | ||||
|             $s =~ s/'/'\\''/g; | ||||
|             return "'" . $s . "'"; | ||||
|         } | ||||
|         $envCommand = "exec $execArgs $interpreter $script ${\(join ' ', (map shellEscape, @savedArgs))}"; | ||||
| 
 | ||||
|         # Überhack to support Perl. Perl examines the shebang and | ||||
|         # executes it unless it contains the string "perl" or "indir", | ||||
|         # or (undocumented) argv[0] does not contain "perl". Exploit | ||||
|         # the latter by doing "exec -a". | ||||
|         if ($interpreter =~ /perl/) { | ||||
|             $execArgs = "-a PERL"; | ||||
|         } | ||||
| 
 | ||||
|         if ($interpreter =~ /ruby/) { | ||||
|             # Hack for Ruby. Ruby also examines the shebang. It tries to | ||||
|             # read the shebang to understand which packages to read from. Since | ||||
|             # this is handled via nix-shell -p, we wrap our ruby script execution | ||||
|             # in ruby -e 'load' which ignores the shebangs. | ||||
|             $envCommand = "exec $execArgs $interpreter -e 'load(\"$script\")' -- ${\(join ' ', (map shellEscape, @savedArgs))}"; | ||||
|         } else { | ||||
|             $envCommand = "exec $execArgs $interpreter $script ${\(join ' ', (map shellEscape, @savedArgs))}"; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     elsif (substr($arg, 0, 1) eq "-") { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue