forked from lix-project/lix
Merge pull request #1169 from dezgeg/fix-shell-shebang
Fix nix-shell shebang usage
This commit is contained in:
commit
ae1e4dfad2
|
@ -117,7 +117,7 @@ int main(int argc, char ** argv)
|
||||||
inShebang = true;
|
inShebang = true;
|
||||||
for (int i = 2; i < argc - 1; ++i)
|
for (int i = 2; i < argc - 1; ++i)
|
||||||
savedArgs.push_back(argv[i]);
|
savedArgs.push_back(argv[i]);
|
||||||
std::vector<string> args;
|
args.clear();
|
||||||
for (auto line : lines) {
|
for (auto line : lines) {
|
||||||
line = chomp(line);
|
line = chomp(line);
|
||||||
std::smatch match;
|
std::smatch match;
|
||||||
|
@ -276,6 +276,7 @@ int main(int argc, char ** argv)
|
||||||
if (n >= args.size()) {
|
if (n >= args.size()) {
|
||||||
throw UsageError(format("%1% requires an argument") % arg);
|
throw UsageError(format("%1% requires an argument") % arg);
|
||||||
}
|
}
|
||||||
|
interactive = false;
|
||||||
auto interpreter = args[n];
|
auto interpreter = args[n];
|
||||||
auto execArgs = "";
|
auto execArgs = "";
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ nix_tests = \
|
||||||
multiple-outputs.sh import-derivation.sh fetchurl.sh optimise-store.sh \
|
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 \
|
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 \
|
check-reqs.sh pass-as-file.sh tarball.sh restricted.sh \
|
||||||
placeholders.sh
|
placeholders.sh nix-shell.sh
|
||||||
# parallel.sh
|
# parallel.sh
|
||||||
|
|
||||||
install-tests += $(foreach x, $(nix_tests), tests/$(x))
|
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…
Reference in a new issue