#!/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