Simplify trace eraser - unset HISTFILE to prevent re-adding

Changes:
- Remove complex history -d loop (unreliable)
- Clean file directly with grep -Ev only
- Clear current session with history -c
- Unset HISTFILE to prevent session from writing on exit
- Disable histappend for current session

Issue:
- Complex history manipulation was unreliable
- Current session kept re-adding commands on exit
- history -w then grep -Ev was conflicting

Solution:
- Just clean the file, period
- Unset HISTFILE so current session won't write anything
- Tell user to exit immediately and start fresh shell

Tested:
✓ File cleaned with grep -Ev
✓ HISTFILE unset prevents writing on exit
This commit is contained in:
cschantz
2025-11-11 17:32:43 -05:00
parent 29da89cefd
commit ee4d1357da
+17 -41
View File
@@ -122,60 +122,36 @@ if [ "$CLEAN_HISTORY" = true ] && [ -f ~/.bash_history ]; then
echo ""
echo "→ Final cleanup: Removing bash history..."
# Disable history recording for this session to prevent re-adding commands
# Disable history recording AND appending for this session
set +o history
shopt -u histappend 2>/dev/null || true
# Clean in-memory history first using history -d (most reliable method)
echo " → Cleaning in-memory history..."
echo " → Cleaning history file..."
GREP_PATTERN="git\.mull\.lol|linux-server-management-toolkit|server-toolkit|launcher\.sh|erase-toolkit-traces"
# Get list of history entry numbers to delete (reverse order to maintain numbering)
entries_to_delete=$(history | grep -E "$GREP_PATTERN" | awk '{print $1}' | sort -rn)
entries_count=$(echo "$entries_to_delete" | grep -c '^' 2>/dev/null || echo 0)
# Delete each matching entry from in-memory history
for entry_num in $entries_to_delete; do
history -d "$entry_num" 2>/dev/null || true
done
echo " ✓ Removed $entries_count toolkit-related entries from in-memory history"
# Also remove any 'history' commands that might show investigation
echo " → Removing history command traces..."
history_entries=$(history | grep -E '^\s*[0-9]+\s+.*history' | awk '{print $1}' | sort -rn)
history_count=$(echo "$history_entries" | grep -c '^' 2>/dev/null || echo 0)
for entry_num in $history_entries; do
history -d "$entry_num" 2>/dev/null || true
done
if [ "$history_count" -gt 0 ]; then
echo " ✓ Removed $history_count history command entries"
fi
# Write cleaned in-memory history back to file
history -w
echo " ✓ Cleaned history written to file"
# Also clean the history file directly (in case commands are from other sessions)
echo " → Cleaning history file for commands from other sessions..."
# Clean the history file directly
if [ -f ~/.bash_history ]; then
cp ~/.bash_history ~/.bash_history.bak.$$
lines_before=$(wc -l < ~/.bash_history.bak.$$ 2>/dev/null || echo 0)
grep -Ev "$GREP_PATTERN" ~/.bash_history.bak.$$ > ~/.bash_history 2>/dev/null || true
lines_after=$(wc -l < ~/.bash_history 2>/dev/null || echo 0)
lines_removed=$((lines_before - lines_after))
rm -f ~/.bash_history.bak.$$
echo " ✓ History file cleaned"
echo "Removed $lines_removed entries from history file"
fi
# Reload cleaned history into current session to prevent re-adding on exit
echo " → Reloading cleaned history into current session..."
# Clear current session's history completely to prevent re-adding on exit
echo " → Clearing current session history..."
history -c
history -r
echo " ✓ In-memory history reloaded from cleaned file"
# Unset HISTFILE to prevent this session from writing on exit
unset HISTFILE
echo " ✓ Current session history cleared and disabled"
echo ""
echo "NOTE: For complete cleanup, run 'exec bash' to start a fresh shell."
echo " This prevents any lingering history from being re-saved."
echo -e "${YELLOW}IMPORTANT: Exit this shell immediately after cleanup${NC}"
echo "Type: exit"
echo "Then start a fresh shell to see cleaned history."
fi
# Offer to remove the entire toolkit (AFTER history cleaning)