| #! /usr/bin/env bash |
| # source: readline.sh |
| # Copyright Gerhard Rieger and contributors (see file CHANGES) |
| # Published under the GNU General Public License V.2, see file COPYING |
| |
| # this is an attempt for a socat based readline wrapper |
| # usage: readline.sh [options] <program> |
| |
| withhistfile=1 |
| |
| STDERR= |
| while true; do |
| case "X$1" in |
| X-lf?*) STDERR="${1:3}" ;; |
| X-lf) shift; STDERR="$1" ;; |
| X-nh|X-nohist*) withhistfile= ;; |
| *) break;; |
| esac |
| shift |
| done |
| |
| PROGRAM="$@" |
| if [ "$withhistfile" ]; then |
| HISTFILE="$HOME/.$1_history" |
| HISTOPT=",history=$HISTFILE" |
| else |
| HISTOPT= |
| fi |
| # |
| # |
| |
| #if test -w .; then |
| if [ -z "$STDERR" ] && find . -maxdepth 0 -user $USER ! -perm /022 -print |grep ^ >/dev/null; then |
| # When cwd is owned by $USER and it is neither group nor world writable |
| STDERR=./socat-readline.${1##*/}.log |
| rm -f $STDERR |
| echo "$0: logs go to $STDERR" >&2 |
| elif [ -z "$STDERR" ]; then |
| echo "$0: insecure working directory, no logs are written" >&2 |
| STDERR=/dev/null |
| else |
| echo "$0: logs go to $STDERR" >&2 |
| fi |
| |
| exec socat -d READLINE"$HISTOPT",noecho='[Pp]assword:' EXEC:"$PROGRAM",sigint,pty,setsid,ctty,raw,echo=0,stderr 2>$STDERR |
| |