#!/usr/bin/env bash # global variables # functions function bashrc_count_lines { wc -l "$HOME/.bashrc" | cut -d' ' -f1 } function bashrc_watch_start { if [[ -z "${BASHRC_LINES+set}" ]]; then BASHRC_LINES=$(bashrc_count_lines) else BASHRC_EVOLVED=true fi } function bashrc_watch_end { bashrc_lines=$(bashrc_count_lines) if [[ "$BASHRC_LINES" -lt "$bashrc_lines" || -n "${BASHRC_EVOLVED+set}" ]]; then echo echo '*****************************' echo '* BASHRC has evolved! *' echo '* please synchronize: *' echo '* *' echo "* source ~/.bashrc *" echo '* *' echo '*****************************' echo fi } function _bashrc_env_with_prefix { arg1="$1" arg2="$2" prefix="$3" if printenv | grep -q "$arg1"; then real_value=$(eval "echo \$$arg1") echo "success for $arg1 = $real_value" else case "$prefix" in export) session_line="export ${arg1}=${arg2}" regex="$session_line" ;; eval) session_line="eval \"\$($arg2)\"" regex="eval \"\\\$\\($arg2\\)\"" ;; *) echo "unknown prefix $prefix" && exit 10 ;; esac append_or_replace "$regex" "$session_line" "$HOME/.bashrc" &>/dev/null eval "$session_line" set +e eval "BASHRC_LINES=$BASHRC_LINES $0" exit $? fi } function bashrc_env_export { _bashrc_env_with_prefix "$1" "$2" 'export' } function bashrc_env_eval { _bashrc_env_with_prefix "$1" "$2" 'eval' } # main set -Eeu bashrc_watch_start echo 'init' bashrc_env_export 'SESSION_RESTART' true bashrc_env_export 'TOTO' fluo bashrc_env_eval 'MISE_SHELL' "$HOME/.local/bin/mise activate bash" echo 'end' bashrc_watch_end