Merge pull request #1169 from dezgeg/fix-shell-shebang
Fix nix-shell shebang usage
This commit is contained in:
		
						commit
						ae1e4dfad2
					
				
					 5 changed files with 74 additions and 2 deletions
				
			
		|  | @ -117,7 +117,7 @@ int main(int argc, char ** argv) | |||
|                     inShebang = true; | ||||
|                     for (int i = 2; i < argc - 1; ++i) | ||||
|                         savedArgs.push_back(argv[i]); | ||||
|                     std::vector<string> args; | ||||
|                     args.clear(); | ||||
|                     for (auto line : lines) { | ||||
|                         line = chomp(line); | ||||
|                         std::smatch match; | ||||
|  | @ -276,6 +276,7 @@ int main(int argc, char ** argv) | |||
|                 if (n >= args.size()) { | ||||
|                     throw UsageError(format("%1% requires an argument") % arg); | ||||
|                 } | ||||
|                 interactive = false; | ||||
|                 auto interpreter = args[n]; | ||||
|                 auto execArgs = ""; | ||||
| 
 | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ nix_tests = \ | |||
|   multiple-outputs.sh import-derivation.sh fetchurl.sh optimise-store.sh \
 | ||||
|   binary-cache.sh nix-profile.sh repair.sh dump-db.sh case-hack.sh \
 | ||||
|   check-reqs.sh pass-as-file.sh tarball.sh restricted.sh \
 | ||||
|   placeholders.sh | ||||
|   placeholders.sh nix-shell.sh | ||||
|   # parallel.sh | ||||
| 
 | ||||
| install-tests += $(foreach x, $(nix_tests), tests/$(x)) | ||||
|  |  | |||
							
								
								
									
										21
									
								
								tests/nix-shell.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								tests/nix-shell.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| source common.sh | ||||
| 
 | ||||
| clearStore | ||||
| 
 | ||||
| # Test nix-shell -A | ||||
| export IMPURE_VAR=foo | ||||
| output=$(nix-shell --pure shell.nix -A shellDrv --run \ | ||||
|     'echo "$IMPURE_VAR - $VAR_FROM_STDENV_SETUP - $VAR_FROM_NIX"') | ||||
| 
 | ||||
| [ "$output" = " - foo - bar" ] | ||||
| 
 | ||||
| # Test nix-shell -p | ||||
| output=$(NIX_PATH=nixpkgs=shell.nix nix-shell --pure -p foo bar --run 'echo "$(foo) $(bar)"') | ||||
| [ "$output" = "foo bar" ] | ||||
| 
 | ||||
| # Test nix-shell shebang mode | ||||
| sed -e "s|@ENV_PROG@|$(type -p env)|" shell.shebang.sh > $TEST_ROOT/shell.shebang.sh | ||||
| chmod a+rx $TEST_ROOT/shell.shebang.sh | ||||
| 
 | ||||
| output=$($TEST_ROOT/shell.shebang.sh) | ||||
| [ "$output" = "foo bar" ] | ||||
							
								
								
									
										46
									
								
								tests/shell.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								tests/shell.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,46 @@ | |||
| { }: | ||||
| 
 | ||||
| with import ./config.nix; | ||||
| 
 | ||||
| rec { | ||||
|   setupSh = builtins.toFile "setup" '' | ||||
|     export VAR_FROM_STDENV_SETUP=foo | ||||
|     for pkg in $buildInputs; do | ||||
|       export PATH=$PATH:$pkg/bin | ||||
|     done | ||||
|   ''; | ||||
| 
 | ||||
|   stdenv = mkDerivation { | ||||
|     name = "stdenv"; | ||||
|     buildCommand = '' | ||||
|       mkdir -p $out | ||||
|       ln -s ${setupSh} $out/setup | ||||
|     ''; | ||||
|   }; | ||||
| 
 | ||||
|   shellDrv = mkDerivation { | ||||
|     name = "shellDrv"; | ||||
|     builder = "/does/not/exist"; | ||||
|     VAR_FROM_NIX = "bar"; | ||||
|     inherit stdenv; | ||||
|   }; | ||||
| 
 | ||||
|   # Used by nix-shell -p | ||||
|   runCommand = name: args: buildCommand: mkDerivation (args // { | ||||
|     inherit name buildCommand stdenv; | ||||
|   }); | ||||
| 
 | ||||
|   foo = runCommand "foo" {} '' | ||||
|     mkdir -p $out/bin | ||||
|     echo 'echo foo' > $out/bin/foo | ||||
|     chmod a+rx $out/bin/foo | ||||
|   ''; | ||||
| 
 | ||||
|   bar = runCommand "bar" {} '' | ||||
|     mkdir -p $out/bin | ||||
|     echo 'echo bar' > $out/bin/bar | ||||
|     chmod a+rx $out/bin/bar | ||||
|   ''; | ||||
| 
 | ||||
|   bash = shell; | ||||
| } | ||||
							
								
								
									
										4
									
								
								tests/shell.shebang.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								tests/shell.shebang.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #! @ENV_PROG@ nix-shell | ||||
| #! nix-shell -I nixpkgs=shell.nix --option use-binary-caches false | ||||
| #! nix-shell --pure -i bash -p foo bar | ||||
| echo "$(foo) $(bar)" | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue