Эх сурвалжийг харах

make socat an optional dependency

Daniel Sheffield 2 сар өмнө
parent
commit
2ba33c3f5f
2 өөрчлөгдсөн 18 нэмэгдсэн , 7 устгасан
  1. 13 7
      capture.sh
  2. 5 0
      helpers/common.sh

+ 13 - 7
capture.sh

@@ -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
 "$@"

+ 5 - 0
helpers/common.sh

@@ -19,6 +19,7 @@ ESSENTIAL_SYSTEM_SPECIFIC=(
 NONESSENTIAL=(
 	iselect
 	vipe
+	socat
 )
 
 get_subprog () {
@@ -34,6 +35,10 @@ get_subprog () {
 	fi
 }
 
+shell_escape(){
+	(set +x; (set -x &>/dev/null; : "$@") 2>&1 | cut -d: -f2- | cut -d' ' -f2-)
+}
+
 check_deps () {
 	for dep in "${ESSENTIAL_GENERIC[@]}" "${ESSENTIAL_SYSTEM_SPECIFIC[@]}"
 	do