From 3127a9aa871342e295e4fc83c01b6bd04a4957ed Mon Sep 17 00:00:00 2001 From: Rich Lafferty Date: Sun, 31 Jan 2021 16:56:06 -0500 Subject: [PATCH] fix(bash): Count jobs with for loop to fix MacOS count issue (#2250) In #1897 we replaced a 'wc -l' with a bash-native job counter, but subsequently discovered that bash on MacOS folds '<<<' output into a single line, preventing line counting. A for loop works around that problem, is still bash-native, and works on Linux as well. While we're at it, also removed the need for command substitution and an echo by doing the work directly on NUM_JOBS. Fixes #2241. --- src/init/starship.bash | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/init/starship.bash b/src/init/starship.bash index 05533527..14902be1 100644 --- a/src/init/starship.bash +++ b/src/init/starship.bash @@ -31,11 +31,11 @@ starship_precmd() { # Save the status, because commands in this pipeline will change $? STARSHIP_CMD_STATUS=$? - local NUM_JOBS + local NUM_JOBS=0 # Evaluate the number of jobs before running the preseved prompt command, so that tools # like z/autojump, which background certain jobs, do not cause spurious background jobs - # to be displayed by starship. Also avoids forking to run `wc`, slightly improving perf - NUM_JOBS=$(n=0; while read line; do [[ $line ]] && n=$((n+1));done <<< $(jobs -p) ; echo $n) + # to be displayed by starship. Also avoids forking to run `wc`, slightly improving perf. + for job in $(jobs -p); do [[ $job ]] && ((NUM_JOBS++)); done # Run the bash precmd function, if it's set. If not set, evaluates to no-op "${starship_precmd_user_func-:}"