# to find the script in the current directory. This will be
# added implicitly.
#
+# If the very first item is "|" (before the script name), the
+# script will get a pipe as its standard input rather than
+# /dev/null; this pipe will give EOF when sg-run-job wants to
+# end the script (ie, when reap-ts is called).
+#
# An argument which is precisely "+" toggles whether the
# subsequent items in SCRIPT-ARGS are added to the expansion of
# /@ in TESTID. (The "+" itself is not added to the arguments
set real_args {}
set adding 1
set testid_args {}
+ set child_pipe_mode r
+
+ if {![string compare | [lindex $args 0]]} {
+ set child_pipe_mode w
+ lshift args
+ }
foreach arg $args {
if {![string compare + $arg]} {
set adding [expr {!$adding}]
if {[var-or-default env(OSSTEST_SIMULATE) 0]} { set xprefix echo }
set log [jobdb::step-log-filename $flight $jobinfo(job) $stepno $ts]
- set redirects {< /dev/null}
+ set redirects {}
if {[string length $log]} {
lappend redirects 2> $log
} else {
lappend redirects 2>@ stderr
}
+ switch -exact $child_pipe_mode {
+ r { lappend redirects < /dev/null }
+ w { lappend redirects >@ stderr }
+ }
set cmd [concat \
[list sh -xc "
exit \$rc
" x $testid ./$ts] \
$real_args $redirects]
- set fh [open |$cmd r]
+ set fh [open |$cmd $child_pipe_mode]
return [list fh $fh $details]
}