Skip to content

Commit

Permalink
Issue #32 disable subshells by default in bash-preexec
Browse files Browse the repository at this point in the history
- This is causing newer versions of bash to exit under some conditions.
  Believe this is caused by a bug in bash's debug trap and functrace that is
  being exposred by bash-preexec.
  • Loading branch information
rcaloras committed Jul 25, 2016
1 parent b8f6f1d commit 9305daa
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 7 deletions.
3 changes: 3 additions & 0 deletions bashhub/shell/bashhub.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ __bh_setup_bashhub() {

# Pull in our libs
source "$BH_DEPS_DIRECTORY/lib-bashhub.sh"

# Disable subshells in bash-preexec
export __bp_disable_subshells="true"
source "$BH_DEPS_DIRECTORY/bash-preexec.sh"

# Hook bashhub into preexec and precmd.
Expand Down
20 changes: 14 additions & 6 deletions bashhub/shell/deps/bash-preexec.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# Author: Ryan Caloras ([email protected])
# Forked from Original Author: Glyph Lefkowitz
#
# V0.3.0
# V0.3.1
#

# General Usage:
Expand Down Expand Up @@ -42,7 +42,7 @@ __bp_imported="defined"

# Should be available to each precmd and preexec
# functions, should they want it.
__bp_last_command_ret_value="$?"
__bp_last_ret_value="$?"

# Command to set our preexec trap. It's invoked once via
# PROMPT_COMMAND and then removed.
Expand Down Expand Up @@ -87,7 +87,7 @@ __bp_interactive_mode() {
# It will invoke any functions defined in the precmd_functions array.
__bp_precmd_invoke_cmd() {

# Should be available to each precmd function, should it want it.
# Save the returned value from our last command
__bp_last_ret_value="$?"

# For every function defined in our function array. Invoke it.
Expand Down Expand Up @@ -234,9 +234,17 @@ __bp_install() {
# Adjust our HISTCONTROL Variable if needed.
__bp_adjust_histcontrol

# Set so debug trap will work be invoked in subshells.
set -o functrace > /dev/null 2>&1
shopt -s extdebug > /dev/null 2>&1

# Issue #25. Setting debug trap for subshells causes sessions to exit for
# backgrounded subshell commands (e.g. (pwd)& ). Believe this is a bug in Bash.
#
# This option allows you to disable subshells.
if [[ -z "$__bp_disable_subshells" ]]; then

# Set so debug trap will work be invoked in subshells.
set -o functrace > /dev/null 2>&1
shopt -s extdebug > /dev/null 2>&1
fi;


local existing_prompt_command
Expand Down
2 changes: 1 addition & 1 deletion bashhub/shell/deps/lib-bashhub.sh
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ __bh_process_command() {
__bh_check_bashhub_installation() {
local ret
ret=0
if [[ -n "$BASH_VERSION" && "$(trap)" != *"__bp_preexec_invoke_exec"* ]]; then
if [[ -n "$BASH_VERSION" && -z "$__bp_disable_subshells" && "$(trap)" != *"__bp_preexec_invoke_exec"* ]]; then
echo "Bashhub's preexec hook is being overriden and is not saving commands. Please resolve what may be holding the DEBUG trap."
ret=1
elif [[ ! -f "$BH_HOME_DIRECTORY/config" ]]; then
Expand Down

0 comments on commit 9305daa

Please sign in to comment.