|
@@ -23,7 +23,7 @@ OUT="$LOG_DIR"/stdout
|
|
|
ERR="$LOG_DIR"/stderr
|
|
|
DAT="$LOG_DIR"/dat
|
|
|
INF="$LOG_DIR"/info
|
|
|
-CMD="$( (set -x; : "$@") 2>&1 | cut -d: -f2- | cut -d' ' -f2-)"
|
|
|
+CMD="$(shell_escape "$@")"
|
|
|
|
|
|
info(){
|
|
|
cat <<EOF > "$INF"
|
|
@@ -31,15 +31,21 @@ $CMD
|
|
|
status=$?
|
|
|
EOF
|
|
|
exec 1>&- 2>&-
|
|
|
- kill "$socat_out"
|
|
|
+ [ "${socat:-}" ] && kill "$socat"
|
|
|
wait
|
|
|
}
|
|
|
|
|
|
trap 'info' EXIT
|
|
|
-tty="$(tty)"
|
|
|
-socat PTY,rawer,link="$PTY" EXEC:"tee -a \"$DAT\" \"$OUT\" \"$tty\"" &
|
|
|
-socat_out="$!"
|
|
|
-while ! [ -e "$PTY" ]; do sleep 0.1; done
|
|
|
+
|
|
|
exec 2> >(tee -a "$DAT" "$ERR")
|
|
|
-exec 1> "$PTY"
|
|
|
+if which socat 1>/dev/null 2>&1
|
|
|
+then
|
|
|
+ tty="$(tty)"
|
|
|
+ socat PTY,rawer,link="$PTY" EXEC:"$(shell_escape tee -a "$DAT" "$OUT" "$tty")" &
|
|
|
+ socat="$!"
|
|
|
+ while ! [ -e "$PTY" ]; do sleep 0.01; done
|
|
|
+ exec 1> "$PTY"
|
|
|
+else
|
|
|
+ exec 1> >(tee -a "$DAT" "$OUT")
|
|
|
+fi
|
|
|
"$@"
|