From 3127a9aa871342e295e4fc83c01b6bd04a4957ed Mon Sep 17 00:00:00 2001
From: Rich Lafferty <rlafferty@pagerduty.com>
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-:}"