On Sun, Oct 11, 2020 at 12:59 PM Chet Ramey <chet.ra...@case.edu> wrote: > > On 10/9/20 7:23 PM, Daniel Farina wrote: > > > Bash Version: 5.0 > > Patch Level: 17 > > Release Status: release > > > > Description: > > > > Pressing Ctrl-C during any subshell evaluation terminates the shell. I > > noticed this when using direnv and emacs together: Ctrl-C would not cancel > > a subprocess started by the shell, but would exit the entire shell. > > > > Relaying this from: https://github.com/direnv/direnv/issues/627 > > > > Repeat-By: > > > > Per https://github.com/direnv/direnv/issues/627#issuecomment-635611930 > > > > $ cat bash.rc > > eval "$(direnv hook bash)" > > What commands does this `direnv' command output?
The source for it is at https://github.com/direnv/direnv/blob/a4632773637ee1a6b08fa81043cacd24ea941489/shell_bash.go#L10-L20 And reads: _direnv_hook() { local previous_exit_status=$?; trap -- '' SIGINT; eval "$("{{.SelfPath}}" export bash)"; trap - SIGINT; return $previous_exit_status; }; if ! [[ "${PROMPT_COMMAND:-}" =~ _direnv_hook ]]; then PROMPT_COMMAND="_direnv_hook${PROMPT_COMMAND:+;$PROMPT_COMMAND}" fi .selfPath is templated. This is embedded in a Go source file. The version that does not exit looks like this. It is the version I use daily. _direnv_hook() { local previous_exit_status=$?; eval "$("{{.SelfPath}}" export bash)"; return $previous_exit_status; }; if ! [[ "${PROMPT_COMMAND:-}" =~ _direnv_hook ]]; then PROMPT_COMMAND="_direnv_hook${PROMPT_COMMAND:+;$PROMPT_COMMAND}" fi https://github.com/direnv/direnv/blob/e2a7d51f31abf36d7983309a14f5036ea8aa6da2/shell_bash.go#L10-L17 > > > > $ bash --rcfile bash.rc > > bash$ echo $PROMPT_COMMAND > > _direnv_hook > > What does `direnv_hook' do? > > > bash$ $(sleep 10) # pressing ^C during those 10 seconds will terminate the > > shell > > ^C > > $ # inner shell terminated > > My guess is that it messes with the controlling terminal somehow, causing > the shell to get EOF or -1/EIO when it attempts to read input. direnv's purpose in life is to execute subshells that are then typed into.