2 changed files with 89 additions and 75 deletions
-
86lib/bashrc_watcher.sh
-
78main
@ -0,0 +1,86 @@ |
|||||
|
function sed_replace { |
||||
|
REGEX=$1 |
||||
|
STRING=$2 |
||||
|
FILE=$3 |
||||
|
if ! grep -Eq "$REGEX" "$FILE"; then |
||||
|
builtin echo -e "$STRING" >>"$FILE" |
||||
|
echo 'appended' |
||||
|
else |
||||
|
sed -Ei "s|$REGEX|$STRING|g" "$FILE" |
||||
|
echo 'replaced' |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
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 |
||||
|
sed_replace "$regex" "$session_line" "$HOME/.bashrc" &>/dev/null |
||||
|
eval "$session_line" |
||||
|
set +e |
||||
|
trap - EXIT |
||||
|
eval "BASHRC_LINES=$BASHRC_LINES $0" |
||||
|
exit $? |
||||
|
fi |
||||
|
|
||||
|
} |
||||
|
|
||||
|
function bashrc_export { |
||||
|
_bashrc_env_with_prefix "$1" "$2" 'export' |
||||
|
} |
||||
|
|
||||
|
function bashrc_eval { |
||||
|
_bashrc_env_with_prefix "$1" "$2" 'eval' |
||||
|
} |
||||
|
|
||||
|
function on_exit() { |
||||
|
rv=$? |
||||
|
# [[ $rv -eq 0 ]] && bashrc_watch_end |
||||
|
bashrc_watch_end |
||||
|
exit $rv |
||||
|
} |
||||
|
|
||||
|
bashrc_watch_start |
||||
|
trap "on_exit" EXIT |
@ -1,81 +1,9 @@ |
|||||
#!/usr/bin/env bash |
#!/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 |
set -Eeu |
||||
bashrc_watch_start |
|
||||
|
source "$(dirname "$0")/lib/bashrc_watcher.sh" |
||||
|
|
||||
echo 'init' |
echo 'init' |
||||
bashrc_env_export 'SESSION_RESTART' true |
|
||||
bashrc_env_export 'TOTO' fluo |
|
||||
bashrc_env_eval 'MISE_SHELL' "$HOME/.local/bin/mise activate bash" |
|
||||
|
bashrc_eval 'MISE_SHELL' "$HOME/.local/bin/mise activate bash" |
||||
|
bashrc_export 'TOTO' fluo |
||||
echo 'end' |
echo 'end' |
||||
|
|
||||
bashrc_watch_end |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue