aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-02-18 15:55:18 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-02-18 15:55:18 +0100
commitdc7e8fae48f65da7aea86043a25a9381b678ebe6 (patch)
treef96448d99a1fbfc95f2111f990a95da8ab6bb247
parentbb100105820496a8a993102c88b7b63fd7eb4282 (diff)
Support passing command line arguments to nix-shell #! scripts
-rwxr-xr-xscripts/nix-build.in7
1 files changed, 5 insertions, 2 deletions
diff --git a/scripts/nix-build.in b/scripts/nix-build.in
index b497d8f5a..c7c516212 100755
--- a/scripts/nix-build.in
+++ b/scripts/nix-build.in
@@ -30,6 +30,7 @@ my $myName = $runEnv ? "nix-shell" : "nix-build";
my $inShebang = 0;
my $script;
+my @savedArgs;
my $tmpDir = mkTempDir($myName);
@@ -43,13 +44,14 @@ $SIG{'INT'} = sub { exit 1 };
# Heuristic to see if we're invoked as a shebang script, namely, if we
# have a single argument, it's the name of an executable file, and it
# starts with "#!".
-if ($runEnv && scalar @ARGV == 1) {
+if ($runEnv && $ARGV[0] !~ /nix-shell/) {
$script = $ARGV[0];
if (-f $script && -x $script) {
open SCRIPT, "<$script" or die "$0: cannot open ‘$script’: $!\n";
my $first = <SCRIPT>;
if ($first =~ /^\#\!/) {
$inShebang = 1;
+ @savedArgs = @ARGV; shift @savedArgs;
@ARGV = ();
while (<SCRIPT>) {
chomp;
@@ -193,7 +195,8 @@ for (my $n = 0; $n < scalar @ARGV; $n++) {
# or (undocumented) argv[0] does not contain "perl". Exploit
# the latter by doing "exec -a".
my $execArgs = $interpreter =~ /perl/ ? "-a PERL" : "";
- $envCommand = "exec $execArgs $interpreter $script";
+ # FIXME: escape arguments.
+ $envCommand = "exec $execArgs $interpreter $script @savedArgs";
}
elsif (substr($arg, 0, 1) eq "-") {