#!/usr/bin/env -S bash
name='main' addr='d' myapp='backsshbash2'
bye() { printf "${@:2}"
exit "$1"
}
start() { [[ -p i ]] || { kill -9 $(
&2 ; fi
done i 2> >( while read -r -N 1 r ; do
if [[ $r == e ]] ; then kill -0 $( pp
stdbuf -i 1 -o 1 -e 1 \
setsid -c \
bash --login -mbi o 2>&1 & printf $! >p
>i1 stdbuf -i 1 -o 1 ssh "$addr" "$( declare -p y )"$'
y=~/$y
set -m
[[ -d $y ]] || mkdir -p "$y"
cd "$y" || exec printf 'err cd transit\n'
[[ -p in || -p out ]] && rm -f {in,out}
mkfifo {in,out}
while stdbuf -i 1 -o 1 cat in ; do sleep .15 || exit 1 ; done &
while stdbuf -i 1 -o 1 cat >>out ; do sleep .15 || exit 1 ; done'
}
connect() { ssh "$addr" "$( declare -p y )"$'
y=~/$y
set -m || exec printf \'err set -m\' >&2
cd "$y" || exec printf \'err cd connect\n\'
[[ -p in && -p out ]] || exec printf \'err in and out not found\n\' >&2
while stdbuf -i 1 -o 1 cat out ; do sleep .15 || exit 1 ; done &
while stdbuf -i 1 -o 1 cat >>in ; do sleep .15 || exit 1 ; done' < <( while read -r -N 1 r ; do printf c%s "$r" ; done )
}
help() { printf %s\\n $'simple args help
possible args are
name | session name
addr | ssh addr str
start | start bash and ssh to transit
connect | connect to session in transit'
exit 0
}
[[ $BASH_SOURCE != */* ]] && myapp=$BASH_SOURCE || myapp=${BASH_SOURCE##*/}
myd=~/.$myapp z=$myd/$name y=.$myapp/$name \
a=( i i1 i2 o p pp )
[[ -d $z ]] || mkdir -p "$z"
cd "$z" || bye 1 'cant cd to safety dir %s\n' "$z"
declare -A \
supported0=( help '' start '' stop '' connect '' )
supported1=( name '' addr '' )
(( $# )) || set -- help
fill=( '' "$@" ) i=
while [[ -v fill[++i] ]] && arg=${fill[i]} ; do
if [[ -v supported0[\$arg] ]] ; then "$arg"
elif [[ -v supported1[\$arg] ]] ; then declare "$arg=${fill[++i]}"
else printf $'unsupported arg %s, please consult running with \'help\' arg\n' "$arg" ; fi
done