Shell Scripting / Bash Tricks
Stop your scripts from nuking themselves when a subshell hits a snag
đź§© The Challenge
You write a script that pipes data into a while loop, only to realize that any variable changes you make inside that loop vanish the second the loop finishes. It’s a total headache when you’re trying to build up an array or track a counter across lines of log output.
đź’ˇ The Fix
Just stop using a pipe into your loop. If you feed the input into the loop using process substitution, the code runs in the current shell context instead of a subshell, so your variables actually stick around.
while read -r line; do ((count++)); done < <(grep "error" /var/log/syslog)
echo "Found $count errors"
⚙️ Why It Works
Because you aren’t using a pipe, the shell doesn’t fork a subshell for the right side of the command. The loop runs in your main script’s memory space, keeping those variable updates alive.
🚀 Pro-Tip: This works for any input stream, not just grepped logs. Give it a shot next time you need to build a hash map from a file.
Linux Tips & Tricks | © ngelinux.com | 10/15/2026
