skip to content
Mansoor's Blog

Bash Script to Save User Session Tool System Prompt

/ 3 min read /

buy me a coffee 🥺
Terminal window
echo "# Functions" >> "$SNAPSHOT_FILE"
# Force autoload all functions first
typeset -f > /dev/null 2>&1
# Now get user function names - filter system ones and write directly to file
typeset +f | grep -vE '^(_|__)' | while read func; do
typeset -f "$func" >> "$SNAPSHOT_FILE"
done
`;else Q+=`
echo "# Functions" >> "$SNAPSHOT_FILE"
# Force autoload all functions first
declare -f > /dev/null 2>&1
# Now get user function names - filter system ones and give the rest to eval in b64 encoding
declare -F | cut -d' ' -f3 | grep -vE '^(_|__)' | while read func; do
# Encode the function to base64, preserving all special characters
encoded_func=$(declare -f "$func" | base64 )
# Write the function definition to the snapshot
echo "eval ${sZ0}"${sZ0}$(echo '$encoded_func' | base64 -d)${sZ0}" > /dev/null 2>&1" >> "$SNAPSHOT_FILE"
done
`;if(B)Q+=`
echo "# Shell Options" >> "$SNAPSHOT_FILE"
setopt | sed 's/^/setopt /' | head -n 1000 >> "$SNAPSHOT_FILE"
`;else Q+=`
echo "# Shell Options" >> "$SNAPSHOT_FILE"
shopt -p | head -n 1000 >> "$SNAPSHOT_FILE"
set -o | grep "on" | awk '{print "set -o " $1}' | head -n 1000 >> "$SNAPSHOT_FILE"
echo "shopt -s expand_aliases" >> "$SNAPSHOT_FILE"
`;return Q+=`
echo "# Aliases" >> "$SNAPSHOT_FILE"
# Filter out winpty aliases on Windows to avoid "stdin is not a tty" errors
# Git Bash automatically creates aliases like "alias node='winpty node.exe'" for
# programs that need Win32 Console in mintty, but winpty fails when there's no TTY
if [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
alias | grep -v "='winpty " | sed 's/^alias //g' | sed 's/^/alias -- /' | head -n 1000 >> "$SNAPSHOT_FILE"
else
alias | sed 's/^alias //g' | sed 's/^/alias -- /' | head -n 1000 >> "$SNAPSHOT_FILE"
fi
# Check for rg availability
echo "# Check for rg availability" >> "$SNAPSHOT_FILE"
echo "if ! command -v rg >/dev/null 2>&1; then" >> "$SNAPSHOT_FILE"
echo ' alias rg='"'${B.replace(/'/g,"'\\''")}'" >> "$SNAPSHOT_FILE"
echo "fi" >> "$SNAPSHOT_FILE"
# Add PATH to the file
echo "export PATH=${N51.default.quote([A||""])}" >> "$SNAPSHOT_FILE"
${Q?`source "${D}" < /dev/null`:"# No user config file to source"}
# First, create/clear the snapshot file
echo "# Snapshot file" >| "$SNAPSHOT_FILE"
# When this file is sourced, we first unalias to avoid conflicts
# This is necessary because aliases get "frozen" inside function definitions at definition time,
# which can cause unexpected behavior when functions use commands that conflict with aliases
echo "# Unset all aliases to avoid conflicts with functions" >> "$SNAPSHOT_FILE"
echo "unalias -a 2>/dev/null || true" >> "$SNAPSHOT_FILE"
${G}
${F}