prepare for temporary bashrc with tmux
This commit is contained in:
parent
1884a7ebff
commit
3ea2b6f1d2
1 changed files with 176 additions and 171 deletions
347
bashrc_add
347
bashrc_add
|
@ -16,204 +16,206 @@
|
|||
# https://guide.bash.academy/expansions/
|
||||
# https://www.tldp.org/LDP/abs/html/refcards.html#AEN22473
|
||||
if [[ $- = *i* ]] ; then
|
||||
#echo "interactive shell" >&2
|
||||
if [ "${BASHRC_TMP:-x}" == "x" ]
|
||||
then
|
||||
#echo "interactive shell" >&2
|
||||
|
||||
# define variables
|
||||
# Base Path
|
||||
[ -z "${MSC_SUBPATH+x}" ] && export MSC_SUBPATH=".local/myshellconfig"
|
||||
[ -z "${MSC_BASE+x}" ] && export MSC_BASE="${HOME}/${MSC_SUBPATH}"
|
||||
# define variables
|
||||
# Base Path
|
||||
[ -z "${MSC_SUBPATH+x}" ] && export MSC_SUBPATH=".local/myshellconfig"
|
||||
[ -z "${MSC_BASE+x}" ] && export MSC_BASE="${HOME}/${MSC_SUBPATH}"
|
||||
|
||||
# hardcoded paths
|
||||
export MSC_BASE_PARENT="$(dirname $MSC_BASE)"
|
||||
export MSC_BASH_COMPLETION="${HOME}/${MSC_SUBPATH}/bash_completion.d"
|
||||
export MSC_GIT_UPD_SUBMOD_STATFILE="${MSC_BASE%/}${MSC_BASE:+/}.last_update_submodules"
|
||||
export MSC_GIT_UPD_REPO_STATFILE="${MSC_BASE%/}${MSC_BASE:+/}.last_update_repo"
|
||||
# hardcoded paths
|
||||
export MSC_BASE_PARENT="$(dirname $MSC_BASE)"
|
||||
export MSC_BASH_COMPLETION="${HOME}/${MSC_SUBPATH}/bash_completion.d"
|
||||
export MSC_GIT_UPD_SUBMOD_STATFILE="${MSC_BASE%/}${MSC_BASE:+/}.last_update_submodules"
|
||||
export MSC_GIT_UPD_REPO_STATFILE="${MSC_BASE%/}${MSC_BASE:+/}.last_update_repo"
|
||||
|
||||
# Load DEFAULTS
|
||||
[ -e ${MSC_BASE}/defaults.conf ] && . ${MSC_BASE}/defaults.conf
|
||||
# Load DEFAULTS
|
||||
[ -e ${MSC_BASE}/defaults.conf ] && . ${MSC_BASE}/defaults.conf
|
||||
|
||||
|
||||
# Userdata
|
||||
[ -z "${USERNAME+x}" ] && export USERNAME="$USER"
|
||||
[ -z "${USEREMAIL+x}" ] && export USEREMAIL="$USER@$(domainname -d)"
|
||||
[ -z "${FULLNAME+x}" ] && export FULLNAME="$(getent passwd $USER | cut -d ":" -f 5 | cut -d ',' -f 1)"
|
||||
|
||||
# GIT
|
||||
[ -z "${GIT_AUTHOR_NAME+x}" ] && export GIT_AUTHOR_NAME=$FULLNAME
|
||||
[ -z "${GIT_AUTHOR_EMAIL+x}" ] && export GIT_AUTHOR_EMAIL=$USEREMAIL
|
||||
[ -z "${GIT_COMMITTER_NAME+x}" ] && export GIT_COMMITTER_NAME=$FULLNAME
|
||||
[ -z "${GIT_COMMITTER_EMAIL+x}" ] && export GIT_COMMITTER_EMAIL=$USEREMAIL
|
||||
# Userdata
|
||||
[ -z "${USERNAME+x}" ] && export USERNAME="$USER"
|
||||
[ -z "${USEREMAIL+x}" ] && export USEREMAIL="$USER@$(domainname -d)"
|
||||
[ -z "${FULLNAME+x}" ] && export FULLNAME="$(getent passwd $USER | cut -d ":" -f 5 | cut -d ',' -f 1)"
|
||||
|
||||
# GIT
|
||||
[ -z "${GIT_AUTHOR_NAME+x}" ] && export GIT_AUTHOR_NAME=$FULLNAME
|
||||
[ -z "${GIT_AUTHOR_EMAIL+x}" ] && export GIT_AUTHOR_EMAIL=$USEREMAIL
|
||||
[ -z "${GIT_COMMITTER_NAME+x}" ] && export GIT_COMMITTER_NAME=$FULLNAME
|
||||
[ -z "${GIT_COMMITTER_EMAIL+x}" ] && export GIT_COMMITTER_EMAIL=$USEREMAIL
|
||||
|
||||
# [ -z "${MSC_GIT_TIMEOUT+x}" ] && export MSC_GIT_TIMEOUT=5s
|
||||
[ -z "${MSC_GIT_CHECKOUT_TIMEOUT+x}" ] && export MSC_GIT_CHECKOUT_TIMEOUT=20s
|
||||
[ -z "${MSC_GIT_SYNC+x}" ] && export MSC_GIT_SYNC=true
|
||||
|
||||
# hardcoded git
|
||||
export MSC_GIT="git -C ${MSC_BASE}"
|
||||
# [ -z "${MSC_GIT_TIMEOUT+x}" ] && export MSC_GIT_TIMEOUT=5s
|
||||
[ -z "${MSC_GIT_CHECKOUT_TIMEOUT+x}" ] && export MSC_GIT_CHECKOUT_TIMEOUT=20s
|
||||
[ -z "${MSC_GIT_SYNC+x}" ] && export MSC_GIT_SYNC=true
|
||||
|
||||
# hardcoded git
|
||||
export MSC_GIT="git -C ${MSC_BASE}"
|
||||
|
||||
|
||||
|
||||
# git-repo-url for vim plugin
|
||||
# TODO: check how to use
|
||||
export MSC_VIM_PLUGINS
|
||||
|
||||
# git-repo-url for vim plugin
|
||||
# TODO: check how to use
|
||||
export MSC_VIM_PLUGINS
|
||||
|
||||
|
||||
# Logging
|
||||
[ -z "${MSC_LOGDIR+x}" ] && export MSC_LOGDIR="${HOME}/logs"
|
||||
[ -z "${MSC_LOGFILE+x}" ] && export MSC_LOGFILE="${MSC_LOGDIR}/myshellconfig.log"
|
||||
[ -z "${SCRIPT_LOG+x}" ] && export SCRIPT_LOG="${MSC_LOGFILE}"
|
||||
# Create necessary directories for logging
|
||||
[ -n "${MSC_LOGDIR-x}" ] && mkdir -p "$MSC_LOGDIR"
|
||||
# load logging functions
|
||||
. ${MSC_BASE}/logging
|
||||
# Logging
|
||||
[ -z "${MSC_LOGDIR+x}" ] && export MSC_LOGDIR="${HOME}/logs"
|
||||
[ -z "${MSC_LOGFILE+x}" ] && export MSC_LOGFILE="${MSC_LOGDIR}/myshellconfig.log"
|
||||
[ -z "${SCRIPT_LOG+x}" ] && export SCRIPT_LOG="${MSC_LOGFILE}"
|
||||
# Create necessary directories for logging
|
||||
[ -n "${MSC_LOGDIR-x}" ] && mkdir -p "$MSC_LOGDIR"
|
||||
# load logging functions
|
||||
. ${MSC_BASE}/logging
|
||||
|
||||
# P11M for etoken/smartcard authentification
|
||||
# Use PKCS11_MODULE or P11M (comes from ssh, when connected from remote) only in context of startagent/loadagent
|
||||
|
||||
# which dnf >/dev/null 2>&1 [ -z "${P11M+x}" ] && P11M="$(dnf repoquery --installed -l p11-kit | grep \/p11-kit-proxy.so\$ | head -1)"
|
||||
# which dpkg >/dev/null 2>&1 && [ -z "${P11M+x}" ] && P11M="$(dpkg -L p11-kit-modules|grep \/p11-kit-proxy.so\$ | head -1)"
|
||||
# P11M for etoken/smartcard authentification
|
||||
# Use PKCS11_MODULE or P11M (comes from ssh, when connected from remote) only in context of startagent/loadagent
|
||||
|
||||
# which dnf >/dev/null 2>&1 [ -z "${P11M+x}" ] && P11M="$(dnf repoquery --installed -l p11-kit | grep \/p11-kit-proxy.so\$ | head -1)"
|
||||
# which dpkg >/dev/null 2>&1 && [ -z "${P11M+x}" ] && P11M="$(dpkg -L p11-kit-modules|grep \/p11-kit-proxy.so\$ | head -1)"
|
||||
|
||||
|
||||
# Basics
|
||||
[ -z "${VISUAL+x}" ] && export VISUAL=${VISUAL_DEFAULT}
|
||||
[ -z "${EDITOR+x}" ] && export EDITOR=${EDITOR_DEFAULT}
|
||||
|
||||
# Basics
|
||||
[ -z "${VISUAL+x}" ] && export VISUAL=${VISUAL_DEFAULT}
|
||||
[ -z "${EDITOR+x}" ] && export EDITOR=${EDITOR_DEFAULT}
|
||||
|
||||
cat << EOF >> "${MSC_LOGFILE}"
|
||||
cat << EOF >> "${MSC_LOGFILE}"
|
||||
==8<=== start configure new shell ============== $(date) ===============8<==
|
||||
|
||||
EOF
|
||||
|
||||
SCRIPTENTRY
|
||||
# define functions
|
||||
SCRIPTENTRY
|
||||
# define functions
|
||||
|
||||
ckrepo () {
|
||||
# check if remote repo is reachable
|
||||
if ${MSC_GIT_SYNC-$MSC_GIT_REPO_UPDATE}; then
|
||||
ckrepo () {
|
||||
# check if remote repo is reachable
|
||||
if ${MSC_GIT_SYNC-$MSC_GIT_REPO_UPDATE}; then
|
||||
|
||||
if [ $(stat --printf %Y ${MSC_GIT_UPD_REPO_STATFILE} 2>/dev/null || echo 0 ) \
|
||||
-lt $(date --date="${MSC_GIT_REPO_UPDATE_INTERVALL-${MSC_GIT_REPO_UPDATE_INTERVALL_DEFAULT}} hours ago" "+%s") ]; then
|
||||
logwarning "sync-intervall (${MSC_GIT_REPO_UPDATE_INTERVALL-${MSC_GIT_REPO_UPDATE_INTERVALL_DEFAULT}} hours) reached"
|
||||
loginfo "check if remote »$($MSC_GIT rev-parse --abbrev-ref @{u} 2>/dev/null | cut -d'/' -f1)« is reachable"
|
||||
if $MSC_GIT fetch --dry-run >/dev/null 2>&1 ;then
|
||||
loginfo "reachable"
|
||||
return 0
|
||||
else
|
||||
logwarning "$($MSC_GIT rev-parse --abbrev-ref @{u} 2>/dev/null | cut -d'/' -f1) not reachable"
|
||||
return 3
|
||||
fi
|
||||
else
|
||||
local seconds=$(( $( date --date="@$(stat --printf %Y ${MSC_GIT_UPD_REPO_STATFILE} 2>/dev/null || echo 0 )" "+%s") - $(date --date="${MSC_GIT_REPO_UPDATE_INTERVALL-${MSC_GIT_REPO_UPDATE_INTERVALL_DEFAULT}} hours ago" "+%s") ))
|
||||
logwarning "repo sync-intervall (${MSC_GIT_REPO_UPDATE_INTERVALL-${MSC_GIT_REPO_UPDATE_INTERVALL_DEFAULT}} hours) not reached yet. $((seconds/86400)) days $(date -d "1970-01-01 + $seconds seconds" "+%H hours %M minutes %S seconds") left."
|
||||
return 2
|
||||
fi
|
||||
else
|
||||
logwarning "no sync allowed from config" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
lastupdatesubmodules () {
|
||||
touch ${MSC_GIT_UPD_SUBMOD_STATFILE}
|
||||
}
|
||||
export -f lastupdatesubmodules
|
||||
|
||||
lastupdaterepo () {
|
||||
touch ${MSC_GIT_UPD_REPO_STATFILE}
|
||||
}
|
||||
export -f lastupdaterepo
|
||||
|
||||
sync_config () {
|
||||
if $MSC_GIT_SYNC; then
|
||||
local nok=""
|
||||
local gco=""
|
||||
if which git >/dev/null; then
|
||||
loginfo -n "Sync config with ${MSC_GIT_SERVER}: "
|
||||
# MSC_GITCHECKOUTSCRIPT_OPTIONS are options for bin/git-myshellconfig-checkout
|
||||
${MSC_BASE}/bin/git-myshellconfig-checkout ${MSC_GIT_CHECKOUTSCRIPT_OPTIONS=${MSC_GIT_CHECKOUTSCRIPT_OPTIONS_DEFAULT}}|| nok="not " 1>>"${MSC_LOGFILE}" 2>&1
|
||||
loginfo "$(printf '%s\n' "${nok}synced" )"
|
||||
[ -z "$nok" ] && mkdir -pv "${MSC_LOGDIR}"
|
||||
|
||||
else
|
||||
logwarning "git not installed, no configuration possible, please install git" >&2
|
||||
fi
|
||||
else
|
||||
logwarning "Not syncing profile in case of configuration"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
pathmunge () {
|
||||
ENTRY
|
||||
case ":${PATH}:" in
|
||||
*:"$1":*)
|
||||
;;
|
||||
*)
|
||||
if [ "$2" = "after" ] ; then
|
||||
PATH=$PATH:$1
|
||||
if [ $(stat --printf %Y ${MSC_GIT_UPD_REPO_STATFILE} 2>/dev/null || echo 0 ) \
|
||||
-lt $(date --date="${MSC_GIT_REPO_UPDATE_INTERVALL-${MSC_GIT_REPO_UPDATE_INTERVALL_DEFAULT}} hours ago" "+%s") ]; then
|
||||
logwarning "sync-intervall (${MSC_GIT_REPO_UPDATE_INTERVALL-${MSC_GIT_REPO_UPDATE_INTERVALL_DEFAULT}} hours) reached"
|
||||
loginfo "check if remote »$($MSC_GIT rev-parse --abbrev-ref @{u} 2>/dev/null | cut -d'/' -f1)« is reachable"
|
||||
if $MSC_GIT fetch --dry-run >/dev/null 2>&1 ;then
|
||||
loginfo "reachable"
|
||||
return 0
|
||||
else
|
||||
logwarning "$($MSC_GIT rev-parse --abbrev-ref @{u} 2>/dev/null | cut -d'/' -f1) not reachable"
|
||||
return 3
|
||||
fi
|
||||
else
|
||||
PATH=$1:$PATH
|
||||
local seconds=$(( $( date --date="@$(stat --printf %Y ${MSC_GIT_UPD_REPO_STATFILE} 2>/dev/null || echo 0 )" "+%s") - $(date --date="${MSC_GIT_REPO_UPDATE_INTERVALL-${MSC_GIT_REPO_UPDATE_INTERVALL_DEFAULT}} hours ago" "+%s") ))
|
||||
logwarning "repo sync-intervall (${MSC_GIT_REPO_UPDATE_INTERVALL-${MSC_GIT_REPO_UPDATE_INTERVALL_DEFAULT}} hours) not reached yet. $((seconds/86400)) days $(date -d "1970-01-01 + $seconds seconds" "+%H hours %M minutes %S seconds") left."
|
||||
return 2
|
||||
fi
|
||||
esac
|
||||
EXIT
|
||||
}
|
||||
|
||||
if [ -d "${MSC_BASE}/bin" ] ; then
|
||||
pathmunge "${MSC_BASE}/bin"
|
||||
export PATH
|
||||
fi
|
||||
|
||||
if [ -d "${HOME}/.local/bin" ] ; then
|
||||
pathmunge "${HOME}/.local/bin"
|
||||
export PATH
|
||||
fi
|
||||
|
||||
# Check for interactive bash and that we haven't already been sourced.
|
||||
if [ -n "${BASH_VERSION-}" -a -n "${PS1-}" -a -z "${BASH_COMPLETION_VERSINFO-}" ]; then
|
||||
|
||||
# Check for recent enough version of bash.
|
||||
if [ ${BASH_VERSINFO[0]} -gt 4 ] || \
|
||||
[ ${BASH_VERSINFO[0]} -eq 4 -a ${BASH_VERSINFO[1]} -ge 1 ]; then
|
||||
[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && \
|
||||
. "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion"
|
||||
if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then
|
||||
# Source completion code.
|
||||
logdebug "Source bash-completion"
|
||||
. /usr/share/bash-completion/bash_completion
|
||||
else
|
||||
logwarning "no sync allowed from config" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
lastupdatesubmodules () {
|
||||
touch ${MSC_GIT_UPD_SUBMOD_STATFILE}
|
||||
}
|
||||
export -f lastupdatesubmodules
|
||||
|
||||
lastupdaterepo () {
|
||||
touch ${MSC_GIT_UPD_REPO_STATFILE}
|
||||
}
|
||||
export -f lastupdaterepo
|
||||
|
||||
sync_config () {
|
||||
if $MSC_GIT_SYNC; then
|
||||
local nok=""
|
||||
local gco=""
|
||||
if which git >/dev/null; then
|
||||
loginfo -n "Sync config with ${MSC_GIT_SERVER}: "
|
||||
# MSC_GITCHECKOUTSCRIPT_OPTIONS are options for bin/git-myshellconfig-checkout
|
||||
${MSC_BASE}/bin/git-myshellconfig-checkout ${MSC_GIT_CHECKOUTSCRIPT_OPTIONS=${MSC_GIT_CHECKOUTSCRIPT_OPTIONS_DEFAULT}}|| nok="not " 1>>"${MSC_LOGFILE}" 2>&1
|
||||
loginfo "$(printf '%s\n' "${nok}synced" )"
|
||||
[ -z "$nok" ] && mkdir -pv "${MSC_LOGDIR}"
|
||||
|
||||
else
|
||||
logwarning "git not installed, no configuration possible, please install git" >&2
|
||||
fi
|
||||
else
|
||||
logwarning "Not syncing profile in case of configuration"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
pathmunge () {
|
||||
ENTRY
|
||||
case ":${PATH}:" in
|
||||
*:"$1":*)
|
||||
;;
|
||||
*)
|
||||
if [ "$2" = "after" ] ; then
|
||||
PATH=$PATH:$1
|
||||
else
|
||||
PATH=$1:$PATH
|
||||
fi
|
||||
esac
|
||||
EXIT
|
||||
}
|
||||
|
||||
if [ -d "${MSC_BASE}/bin" ] ; then
|
||||
pathmunge "${MSC_BASE}/bin"
|
||||
export PATH
|
||||
fi
|
||||
|
||||
fi
|
||||
if [ -d "${HOME}/.local/bin" ] ; then
|
||||
pathmunge "${HOME}/.local/bin"
|
||||
export PATH
|
||||
fi
|
||||
|
||||
# source git-sync part of myshellconfig
|
||||
. "${MSC_BASE}/myshell_git_sync"
|
||||
# Check for interactive bash and that we haven't already been sourced.
|
||||
if [ -n "${BASH_VERSION-}" -a -n "${PS1-}" -a -z "${BASH_COMPLETION_VERSINFO-}" ]; then
|
||||
|
||||
# source loading defaults part of myshellconfig
|
||||
. "${MSC_BASE}/myshell_load_defaults"
|
||||
# Check for recent enough version of bash.
|
||||
if [ ${BASH_VERSINFO[0]} -gt 4 ] || \
|
||||
[ ${BASH_VERSINFO[0]} -eq 4 -a ${BASH_VERSINFO[1]} -ge 1 ]; then
|
||||
[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && \
|
||||
. "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion"
|
||||
if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then
|
||||
# Source completion code.
|
||||
logdebug "Source bash-completion"
|
||||
. /usr/share/bash-completion/bash_completion
|
||||
fi
|
||||
fi
|
||||
|
||||
# source loading workaround for x2go to forward local etoken to remote machine with forwardagent
|
||||
. "${MSC_BASE}/myshell_load_x2go_tokenforward"
|
||||
fi
|
||||
|
||||
_tmux_hook
|
||||
_umask_hook
|
||||
_pkcs11module_hook
|
||||
promptcommandmunge "_tmux_hook"
|
||||
promptcommandmunge "_umask_hook"
|
||||
promptcommandmunge "_pkcs11module_hook"
|
||||
which direnv >/dev/null && eval "$(direnv hook bash)"
|
||||
|
||||
cat << EOF >> "${MSC_LOGFILE}"
|
||||
# source git-sync part of myshellconfig
|
||||
. "${MSC_BASE}/myshell_git_sync"
|
||||
|
||||
# source loading defaults part of myshellconfig
|
||||
. "${MSC_BASE}/myshell_load_defaults"
|
||||
|
||||
# source loading workaround for x2go to forward local etoken to remote machine with forwardagent
|
||||
. "${MSC_BASE}/myshell_load_x2go_tokenforward"
|
||||
|
||||
_tmux_hook
|
||||
_umask_hook
|
||||
_pkcs11module_hook
|
||||
promptcommandmunge "_tmux_hook"
|
||||
promptcommandmunge "_umask_hook"
|
||||
promptcommandmunge "_pkcs11module_hook"
|
||||
which direnv >/dev/null && eval "$(direnv hook bash)"
|
||||
|
||||
cat << EOF >> "${MSC_LOGFILE}"
|
||||
==8<=== finished configure new shell ================ $(date) ===============8<==
|
||||
|
||||
EOF
|
||||
#else
|
||||
# echo "non-interactive shell" >&2
|
||||
SCRIPTEXIT
|
||||
#else
|
||||
# echo "non-interactive shell" >&2
|
||||
SCRIPTEXIT
|
||||
|
||||
# Start tmux if not defined as STARTTMUX in bashrc
|
||||
logdebug "start tmux ${STARTTMUXDEFAULT} - ${STARTTMUXREMOTEDEFAULT} - ${STARTTMUX-$STARTTMUXDEFAULT}"
|
||||
if ${STARTTMUX-$STARTTMUXDEFAULT} ; then
|
||||
cat << EOF
|
||||
# Start tmux if not defined as STARTTMUX in bashrc
|
||||
logdebug "start tmux ${STARTTMUXDEFAULT} - ${STARTTMUXREMOTEDEFAULT} - ${STARTTMUX-$STARTTMUXDEFAULT}"
|
||||
if ${STARTTMUX-$STARTTMUXDEFAULT} ; then
|
||||
cat << EOF
|
||||
|
||||
"User: $USER - $UID - $SSH_CONNECTION"
|
||||
|
||||
|
@ -221,11 +223,14 @@ Starting or resuming screen session
|
|||
Press CTRL+C to cancel screen startup
|
||||
|
||||
EOF
|
||||
sleep 1
|
||||
#screen -UxR
|
||||
tmux attach-session
|
||||
logdebug "started tmux"
|
||||
sleep 1
|
||||
#screen -UxR
|
||||
tmux attach-session
|
||||
logdebug "started tmux"
|
||||
fi
|
||||
logdebug "after"
|
||||
else
|
||||
exec bash --rcfile "${BASHRC_TMP}"
|
||||
fi
|
||||
logdebug "after"
|
||||
|
||||
fi
|
||||
|
|
Loading…
Reference in a new issue