I finally realised that I can use process substitution to make this
work, rather than messing about with coprocesses. Go me.
##
## 0 -- original stdin (never touched)
## 1, 2 -- stdout, stderr, redirected to 3 while running comamnds
##
## 0 -- original stdin (never touched)
## 1, 2 -- stdout, stderr, redirected to 3 while running comamnds
-## log -- original stderr (verbose), or logfile (quiet); captures command
-## output
-## diag -- null (verbose), or logfile (quiet); primary diagnostic output
+## log -- logfile and original stderr (verbose), or logfile only (quiet);
+## captures command output
+## diag -- logfile; primary diagnostic output
## term -- orginal stderr; secondary diagnostic output (with colours)
notify () {
## term -- orginal stderr; secondary diagnostic output (with colours)
notify () {
chmod -R +w $releasepath 2>/dev/null || :
rm -rf $releasepath 2>/dev/null || :
mkdir $releasepath
chmod -R +w $releasepath 2>/dev/null || :
rm -rf $releasepath 2>/dev/null || :
mkdir $releasepath
+logfile=$releasepath/mdw-build.log
+exec {diag}>>$logfile || fail "Failed to create log."
- no)
- exec {diag}>$releasepath/mdw-build.log {log}>&$diag ||
- fail "Failed to create log."
- ;;
- yes)
- exec {diag}>/dev/null {log}>&2
- ;;
+ no) exec {log}>&$diag ;;
+ yes) exec {log}> >(tee -a $logfile >&$term {term}>&- {diag}>&-) ;;
esac
## Repeat the earlier assignments for tbe benefit of the logfile.
assign toppath $toppath
assign releasepath $releasepath
esac
## Repeat the earlier assignments for tbe benefit of the logfile.
assign toppath $toppath
assign releasepath $releasepath
## Do we have a Git repository?
case "$checkout,$setup,$(yesno [ -d $toppath/.git ])" in
## Do we have a Git repository?
case "$checkout,$setup,$(yesno [ -d $toppath/.git ])" in