started transition to abduco; no need for 'script' anymore
This commit is contained in:
parent
718469f548
commit
06fb9227bf
128
session
128
session
|
|
@ -6,8 +6,7 @@ CONFIG_FILE="$HOME/.sessionrc"
|
||||||
typeset -A config
|
typeset -A config
|
||||||
# Set defaults
|
# Set defaults
|
||||||
config=(
|
config=(
|
||||||
[socket_dir]="/tmp/"
|
[session_dir]="$HOME/.session/"
|
||||||
[socket_base]="session-$UID"
|
|
||||||
[log_session]="yes"
|
[log_session]="yes"
|
||||||
[scrollback]="50"
|
[scrollback]="50"
|
||||||
[detach_char]=""
|
[detach_char]=""
|
||||||
|
|
@ -25,9 +24,13 @@ if [ -f "$CONFIG_FILE" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set some variables
|
# Set some variables
|
||||||
SOCKET_PREFIX="${config[socket_dir]}/${config[socket_base]}-"
|
export ABDUCO_SOCKET_DIR=${config[socket_dir]}
|
||||||
SOCKET_SUFFIX=".socket"
|
SOCKET_PREFIX="${config[socket_dir]}/abduco/$USER/"
|
||||||
|
SOCKET_SUFFIX="@${HOSTNAME}"
|
||||||
|
LOG_PREFIX="${config[socket_dir]}/log/"
|
||||||
LOG_SUFFIX=".log"
|
LOG_SUFFIX=".log"
|
||||||
|
mkdir -p $SOCKET_PREFIX
|
||||||
|
mkdir -p $LOG_PREFIX
|
||||||
|
|
||||||
# Exit codes
|
# Exit codes
|
||||||
EXIT_SUCCESS=0
|
EXIT_SUCCESS=0
|
||||||
|
|
@ -115,7 +118,12 @@ get_session_path() {
|
||||||
|
|
||||||
get_log_path() {
|
get_log_path() {
|
||||||
local session_name=$1
|
local session_name=$1
|
||||||
echo "${SOCKET_PREFIX}${session_name}${LOG_SUFFIX}"
|
echo "${LOG_PREFIX}${session_name}.log"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_fifo_path() {
|
||||||
|
local session_name=$1
|
||||||
|
echo "${LOG_PREFIX}${session_name}.fifo"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_session_pid() {
|
get_session_pid() {
|
||||||
|
|
@ -131,6 +139,16 @@ is_existing_session_path() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_logging() {
|
||||||
|
local session_name=$1
|
||||||
|
local fifo_path=$(get_fifo_path $session_name)
|
||||||
|
if [ -a $fifo_path ]; then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
false
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
is_existing_session_name() {
|
is_existing_session_name() {
|
||||||
is_existing_session_path $(get_session_path $1)
|
is_existing_session_path $(get_session_path $1)
|
||||||
}
|
}
|
||||||
|
|
@ -144,15 +162,15 @@ get_new_session_name() {
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_if_in_session() {
|
exit_if_in_session() {
|
||||||
if [ ! -z $DTACH_SOCKET_PATH ]; then
|
if [ ! -z $ABDUCO_SESSION ]; then
|
||||||
echo >&2 "Cannot attach to a session from within a session."
|
echo >&2 "Error: currently attached to session $ABDUCO_SESSION."
|
||||||
exit $EXIT_ALREADY_IN_SESSION
|
exit $EXIT_ALREADY_IN_SESSION
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_if_not_in_session() {
|
exit_if_not_in_session() {
|
||||||
if [ -z $DTACH_SOCKET_PATH ]; then
|
if [ -z $ABDUCO_SESSION ]; then
|
||||||
echo >&2 "Currently not attached to any session."
|
echo >&2 "Error: currently not attached to any session."
|
||||||
exit $EXIT_NOT_ATTACHED
|
exit $EXIT_NOT_ATTACHED
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
@ -171,6 +189,22 @@ exit_if_nonexisting_session() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
select_session() {
|
||||||
|
sessions_avail=($(get_available_sessions))
|
||||||
|
if [ ${#sessions_avail[@]} -eq 0 ]; then
|
||||||
|
exit $EXIT_SUCCESS
|
||||||
|
fi
|
||||||
|
echo >&2 "Select a session (q to quit)"
|
||||||
|
select session_name in ${sessions_avail[@]}
|
||||||
|
do
|
||||||
|
if [ -z "$session_name" ]; then
|
||||||
|
exit $EXIT_SUCCESS
|
||||||
|
fi
|
||||||
|
exit_if_nonexisting_session $session_name
|
||||||
|
break
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
print_session_info() {
|
print_session_info() {
|
||||||
local session_name=$1
|
local session_name=$1
|
||||||
local session_path=$(get_session_path $session_name)
|
local session_path=$(get_session_path $session_name)
|
||||||
|
|
@ -193,35 +227,22 @@ shift
|
||||||
case $mode in
|
case $mode in
|
||||||
"")
|
"")
|
||||||
exit_if_not_in_session
|
exit_if_not_in_session
|
||||||
echo "Currently attached to '$DTACH_SESSION_NAME'."
|
echo "Currently attached to '$ABDUCO_SESSION'."
|
||||||
exit $EXIT_SUCCESS
|
exit $EXIT_SUCCESS
|
||||||
;;
|
;;
|
||||||
"attach"|"att"|"a")
|
"attach"|"att"|"a")
|
||||||
exit_if_in_session
|
exit_if_in_session
|
||||||
# If no session name specified: select interactively
|
# If no session name specified: select interactively
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
sessions_avail=($(get_available_sessions))
|
select_session
|
||||||
if [ ${#sessions_avail[@]} -eq 0 ]; then
|
|
||||||
exit $EXIT_SUCCESS
|
|
||||||
fi
|
|
||||||
echo >&2 "Select a session (q to quit)"
|
|
||||||
select session_name in ${sessions_avail[@]}
|
|
||||||
do
|
|
||||||
if [ -z "$session_name" ]; then
|
|
||||||
exit $EXIT_SUCCESS
|
|
||||||
fi
|
|
||||||
exit_if_nonexisting_session $session_name
|
|
||||||
break
|
|
||||||
done
|
|
||||||
else
|
else
|
||||||
session_name=$1
|
session_name=$1
|
||||||
exit_if_nonexisting_session $session_name
|
exit_if_nonexisting_session $session_name
|
||||||
fi
|
fi
|
||||||
session_path=$(get_session_path $session_name)
|
CMD="abduco -a -S -e ${config[detach_char]} $session_name"
|
||||||
CMD="dtach -a $session_path -e ${config[detach_char]} -r winch "
|
|
||||||
#echo $CMD
|
#echo $CMD
|
||||||
echo "[attached to '$session_name']"
|
echo "[attached to '$session_name']"
|
||||||
[[ "${config[log_session]}" == "yes" ]] && print_scrollback $session_name
|
is_logging $session_name && print_scrollback $session_name
|
||||||
eval $CMD
|
eval $CMD
|
||||||
exit $EXITSUCCESS
|
exit $EXITSUCCESS
|
||||||
;;
|
;;
|
||||||
|
|
@ -237,20 +258,57 @@ case $mode in
|
||||||
exit_if_existing_session $session_name
|
exit_if_existing_session $session_name
|
||||||
fi
|
fi
|
||||||
session_path=$(get_session_path $session_name)
|
session_path=$(get_session_path $session_name)
|
||||||
CMD="env DTACH_SOCKET_PATH=$session_path DTACH_SESSION_NAME=$session_name "
|
CMD="abduco -n $session_name /bin/bash"
|
||||||
CMD+="dtach -c $session_path -e ${config[detach_char]} -r winch "
|
|
||||||
if [[ "${config[log_session]}" == "yes" ]]; then
|
|
||||||
log_path=$(get_log_path $session_name)
|
|
||||||
touch $log_path && chmod 600 $log_path
|
|
||||||
CMD+="/bin/script -q -f $log_path"
|
|
||||||
else
|
|
||||||
CMD+="/bin/bash"
|
|
||||||
fi
|
|
||||||
#echo $CMD
|
#echo $CMD
|
||||||
echo "[new session '$session_name']"
|
echo "[new session '$session_name']"
|
||||||
eval $CMD
|
eval $CMD
|
||||||
|
# if [[ "${config[log_session]}" == "yes" ]]; then
|
||||||
|
# log_path=$(get_log_path $session_name)
|
||||||
|
# touch $log_path && chmod 600 $log_path
|
||||||
|
# abduco -r -S -q -l -a $session_name > $log_path &
|
||||||
|
# #disown
|
||||||
|
# fi
|
||||||
|
CMD="abduco -a -S -e ${config[detach_char]} $session_name"
|
||||||
|
eval $CMD
|
||||||
exit $EXITSUCCESS
|
exit $EXITSUCCESS
|
||||||
;;
|
;;
|
||||||
|
"log")
|
||||||
|
case "$1" in
|
||||||
|
"start"|"stop");;
|
||||||
|
*)
|
||||||
|
echo >&2 "'$(basename $0) log' accepts:"
|
||||||
|
echo >&2 " start, stop"
|
||||||
|
exit $EXIT_INVALID_SUBMODE
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if [ -z "$2" ]; then
|
||||||
|
exit_if_not_in_session
|
||||||
|
session_name=$ABDUCO_SESSION
|
||||||
|
else
|
||||||
|
session_name=$2
|
||||||
|
exit_if_nonexisting_session $session_name
|
||||||
|
fi
|
||||||
|
log_path=$(get_log_path $session_name)
|
||||||
|
fifo_path=$(get_fifo_path $session_name)
|
||||||
|
case "$1" in
|
||||||
|
"start")
|
||||||
|
if is_logging $session_name; then
|
||||||
|
echo >&2 "Already logging session $session_name."
|
||||||
|
exit $EXIT_ALREADY_LOGGING
|
||||||
|
fi
|
||||||
|
touch $log_path && chmod 600 $log_path
|
||||||
|
mkfifo $fifo_path
|
||||||
|
cat $fifo_path | abduco -r -S -a $session_name &> $log_path && rm $log_path $fifo_path & disown
|
||||||
|
;;
|
||||||
|
"stop")
|
||||||
|
if ! is_logging $session_name; then
|
||||||
|
echo 2> "Currently not logging session $session_name."
|
||||||
|
exit $EXIT_NOT_LOGGING
|
||||||
|
fi
|
||||||
|
echo > $fifo_path
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
"terminate"|"term"|"t"|"kill"|"k")
|
"terminate"|"term"|"t"|"kill"|"k")
|
||||||
# Check if we are in terminate/kill mode
|
# Check if we are in terminate/kill mode
|
||||||
if [[ ${mode::1} == "k" ]]; then
|
if [[ ${mode::1} == "k" ]]; then
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue