improved session quit -> alias of exit
This commit is contained in:
parent
63662d1e38
commit
0b34009594
198
session
198
session
|
|
@ -89,65 +89,29 @@ print_help() {
|
||||||
echo >&2 "and logs of terminated sessions may be cleared using '$(basename $0) clean log'."
|
echo >&2 "and logs of terminated sessions may be cleared using '$(basename $0) clean log'."
|
||||||
}
|
}
|
||||||
|
|
||||||
get_available_sessions() {
|
execute_command(){
|
||||||
socket_names=($(abduco | tail +2 | awk '{ print $(NF) }'))
|
local session_name="$1"
|
||||||
echo ${socket_names[@]}
|
shift
|
||||||
|
local command="$@"
|
||||||
|
echo "$command" | abduco -p $session_name
|
||||||
}
|
}
|
||||||
|
|
||||||
get_session_path() {
|
enable_log(){
|
||||||
local session_name=$1
|
local session_name=$1
|
||||||
echo "${SOCKET_DIR}/${session_name}@${HOSTNAME}"
|
local log_path=$(get_log_path $session_name)
|
||||||
|
local fifo_path=$(get_fifo_path $session_name)
|
||||||
|
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
|
||||||
|
execute_command $session_name "alias exit='session quit'"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_log_path() {
|
disable_log(){
|
||||||
local session_name=$1
|
local session_name=$1
|
||||||
echo "${LOG_DIR}${session_name}.log"
|
local log_path=$(get_log_path $session_name)
|
||||||
}
|
local fifo_path=$(get_fifo_path $session_name)
|
||||||
|
echo > $fifo_path
|
||||||
get_fifo_path() {
|
execute_command $session_name "unalias exit"
|
||||||
local session_name=$1
|
|
||||||
echo "${LOG_DIR}${session_name}.fifo"
|
|
||||||
}
|
|
||||||
|
|
||||||
get_session_pid() {
|
|
||||||
local session_name=$1
|
|
||||||
abduco | tail +2 | grep "\b${session_name}\$" | awk '{ print $(NF-1) }'
|
|
||||||
}
|
|
||||||
|
|
||||||
get_session_subpid() {
|
|
||||||
local session_name=$1
|
|
||||||
local ppid=$(get_session_pid $session_name)
|
|
||||||
ps --ppid=$ppid | awk 'NR==2 {print $1; exit}'
|
|
||||||
}
|
|
||||||
|
|
||||||
is_existing_session_path() {
|
|
||||||
if [ -S $1 ]; then
|
|
||||||
true
|
|
||||||
else
|
|
||||||
false
|
|
||||||
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_path $(get_session_path $1)
|
|
||||||
}
|
|
||||||
|
|
||||||
get_new_session_name() {
|
|
||||||
local ii=1
|
|
||||||
while is_existing_session_name $ii; do
|
|
||||||
ii=$((ii+1))
|
|
||||||
done
|
|
||||||
echo $ii
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_if_in_session() {
|
exit_if_in_session() {
|
||||||
|
|
@ -178,27 +142,65 @@ exit_if_nonexisting_session() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
select_session() {
|
get_available_sessions() {
|
||||||
sessions_avail=($(get_available_sessions))
|
socket_names=($(abduco | tail +2 | awk '{ print $(NF) }'))
|
||||||
if [ ${#sessions_avail[@]} -eq 0 ]; then
|
echo ${socket_names[@]}
|
||||||
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_scrollback() {
|
get_fifo_path() {
|
||||||
local session_name=$1
|
local session_name=$1
|
||||||
local log_path=$(get_log_path $session_name)
|
echo "${LOG_DIR}${session_name}.fifo"
|
||||||
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
|
}
|
||||||
tail -n ${config[scrollback]} $log_path
|
|
||||||
|
get_log_path() {
|
||||||
|
local session_name=$1
|
||||||
|
echo "${LOG_DIR}${session_name}.log"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_new_session_name() {
|
||||||
|
local ii=1
|
||||||
|
while is_existing_session_name $ii; do
|
||||||
|
ii=$((ii+1))
|
||||||
|
done
|
||||||
|
echo $ii
|
||||||
|
}
|
||||||
|
|
||||||
|
get_session_path() {
|
||||||
|
local session_name=$1
|
||||||
|
echo "${SOCKET_DIR}/${session_name}@${HOSTNAME}"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_session_pid() {
|
||||||
|
local session_name=$1
|
||||||
|
abduco | tail +2 | grep "\b${session_name}\$" | awk '{ print $(NF-1) }'
|
||||||
|
}
|
||||||
|
|
||||||
|
get_session_subpid() {
|
||||||
|
local session_name=$1
|
||||||
|
local ppid=$(get_session_pid $session_name)
|
||||||
|
ps --ppid=$ppid | awk 'NR==2 {print $1; exit}'
|
||||||
|
}
|
||||||
|
|
||||||
|
is_existing_session_path() {
|
||||||
|
if [ -S $1 ]; then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
false
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
is_existing_session_name() {
|
||||||
|
is_existing_session_path $(get_session_path $1)
|
||||||
|
}
|
||||||
|
|
||||||
|
is_logging() {
|
||||||
|
local session_name=$1
|
||||||
|
local fifo_path=$(get_fifo_path $session_name)
|
||||||
|
if [ -a $fifo_path ]; then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
false
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_recursively() {
|
kill_recursively() {
|
||||||
|
|
@ -218,10 +220,32 @@ kill_recursively() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print_scrollback() {
|
||||||
|
local session_name=$1
|
||||||
|
local log_path=$(get_log_path $session_name)
|
||||||
|
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
|
||||||
|
tail -n ${config[scrollback]} $log_path
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
## Parse first argument (= mode argument)
|
## Parse first argument (= mode argument)
|
||||||
mode=$1
|
mode=$1
|
||||||
shift
|
shift
|
||||||
|
|
||||||
## Now enter mode specific code
|
## Now enter mode specific code
|
||||||
case $mode in
|
case $mode in
|
||||||
"")
|
"")
|
||||||
|
|
@ -262,8 +286,7 @@ case $mode in
|
||||||
#echo $CMD
|
#echo $CMD
|
||||||
eval $CMD
|
eval $CMD
|
||||||
if [[ "${config[log_session]}" == "yes" ]]; then
|
if [[ "${config[log_session]}" == "yes" ]]; then
|
||||||
CMD="echo 'session log on' | abduco -p $session_name"
|
execute_command $session_name "session log on"
|
||||||
eval $CMD
|
|
||||||
fi
|
fi
|
||||||
CMD="abduco -a -S -e ${config[detach_char]} $session_name"
|
CMD="abduco -a -S -e ${config[detach_char]} $session_name"
|
||||||
eval $CMD
|
eval $CMD
|
||||||
|
|
@ -285,24 +308,20 @@ case $mode in
|
||||||
session_name=$2
|
session_name=$2
|
||||||
exit_if_nonexisting_session $session_name
|
exit_if_nonexisting_session $session_name
|
||||||
fi
|
fi
|
||||||
log_path=$(get_log_path $session_name)
|
|
||||||
fifo_path=$(get_fifo_path $session_name)
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
"on")
|
"on")
|
||||||
if is_logging $session_name; then
|
if is_logging $session_name; then
|
||||||
echo >&2 "Already logging session $session_name."
|
echo >&2 "Already logging session $session_name."
|
||||||
exit $EXIT_ALREADY_LOGGING
|
exit $EXIT_ALREADY_LOGGING
|
||||||
fi
|
fi
|
||||||
touch $log_path && chmod 600 $log_path
|
enable_log $session_name
|
||||||
mkfifo $fifo_path
|
|
||||||
cat $fifo_path | abduco -r -S -a $session_name &> $log_path && rm $log_path $fifo_path & disown
|
|
||||||
;;
|
;;
|
||||||
"off")
|
"off")
|
||||||
if ! is_logging $session_name; then
|
if ! is_logging $session_name; then
|
||||||
echo 2> "Currently not logging session $session_name."
|
echo 2> "Currently not logging session $session_name."
|
||||||
exit $EXIT_NOT_LOGGING
|
exit $EXIT_NOT_LOGGING
|
||||||
fi
|
fi
|
||||||
echo > $fifo_path
|
disable_log $session_name
|
||||||
;;
|
;;
|
||||||
"status")
|
"status")
|
||||||
if is_logging $session_name; then
|
if is_logging $session_name; then
|
||||||
|
|
@ -314,9 +333,9 @@ case $mode in
|
||||||
;;
|
;;
|
||||||
"reset")
|
"reset")
|
||||||
if is_logging $session_name; then
|
if is_logging $session_name; then
|
||||||
session log off $session_name
|
disable_log $session_name
|
||||||
fi
|
fi
|
||||||
session log on $session_name
|
enable_log $session_name
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
exit $EXIT_SUCCESS
|
exit $EXIT_SUCCESS
|
||||||
|
|
@ -371,11 +390,12 @@ case $mode in
|
||||||
"list"|"ls"|"l")
|
"list"|"ls"|"l")
|
||||||
sessions_avail=($(get_available_sessions))
|
sessions_avail=($(get_available_sessions))
|
||||||
for sname in ${sessions_avail[@]}; do
|
for sname in ${sessions_avail[@]}; do
|
||||||
printf "$sname"
|
if [[ "$sname" == "$ABDUCO_SESSION" ]]; then
|
||||||
if [[ "$sname" == "$DTACH_SESSION_NAME" ]]; then
|
|
||||||
printf "*"
|
printf "*"
|
||||||
|
else
|
||||||
|
printf " "
|
||||||
fi
|
fi
|
||||||
printf "\n"
|
printf "$sname\n"
|
||||||
done
|
done
|
||||||
exit $EXIT_SUCCESS
|
exit $EXIT_SUCCESS
|
||||||
;;
|
;;
|
||||||
|
|
@ -387,9 +407,9 @@ case $mode in
|
||||||
exit_if_not_in_session
|
exit_if_not_in_session
|
||||||
session_name=$ABDUCO_SESSION
|
session_name=$ABDUCO_SESSION
|
||||||
if is_logging $session_name; then
|
if is_logging $session_name; then
|
||||||
session log off
|
disable_log $session_name
|
||||||
fi
|
fi
|
||||||
echo "exit" | abduco -p $session_name
|
execute_command $session_name "exit"
|
||||||
exit $EXIT_SUCCESS
|
exit $EXIT_SUCCESS
|
||||||
;;
|
;;
|
||||||
"help"|"h")
|
"help"|"h")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue