From 4ea034a5c56a60ae0ceedf18a066c428a963c836 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Thu, 17 Oct 2013 11:07:34 -0400 Subject: [PATCH] nix-shell: Play nicely with non-interactive shells nix-shell with the --command flag might be used non-interactively, but if bash starts non-interactively (i.e. with stdin or stderr not a terminal), it won't source the script given in --rcfile. However, in that case it *will* source the script found in $BASH_ENV, so we can use that instead. Also, don't source ~/.bashrc in a non-interactive shell (detectable by checking the PS1 env var) Signed-off-by: Shea Levy --- scripts/nix-build.in | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/nix-build.in b/scripts/nix-build.in index 3b5b8413c..4bf85ae13 100755 --- a/scripts/nix-build.in +++ b/scripts/nix-build.in @@ -202,7 +202,8 @@ foreach my $expr (@exprs) { my $rcfile = "$tmpDir/rc"; writeFile( $rcfile, - '[ -e ~/.bashrc ] && source ~/.bashrc; ' . + 'unset BASH_ENV; ' . + '[ -n "$PS1" ] && [ -e ~/.bashrc ] && source ~/.bashrc; ' . ($pure ? '' : 'p=$PATH; ' ) . 'dontAddDisableDepTrack=1; ' . '[ -e $stdenv/setup ] && source $stdenv/setup; ' . @@ -212,6 +213,7 @@ foreach my $expr (@exprs) { 'unset NIX_ENFORCE_PURITY; ' . 'shopt -u nullglob; ' . $envCommand); + $ENV{BASH_ENV} = $rcfile; exec($ENV{NIX_BUILD_SHELL} // "bash", "--rcfile", $rcfile); die; }