diff --git a/bootstrap_jiri_test.go b/bootstrap_jiri_test.go
index f5fce52..3bdca29 100644
--- a/bootstrap_jiri_test.go
+++ b/bootstrap_jiri_test.go
@@ -15,7 +15,7 @@
 )
 
 func TestBootstrapJiri(t *testing.T) {
-	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf})
+	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf, PropagateChildOutput: true})
 	defer sh.Cleanup()
 
 	bootstrap, err := filepath.Abs("./scripts/bootstrap_jiri")
@@ -23,10 +23,7 @@
 		t.Fatalf("couldn't determine absolute path to bootstrap_jiri script")
 	}
 	rootDir := filepath.Join(sh.MakeTempDir(), "root")
-	c := sh.Cmd(bootstrap, []string{rootDir}...)
-	c.AddStdoutWriter(gosh.NopWriteCloser(os.Stdout))
-	c.AddStderrWriter(gosh.NopWriteCloser(os.Stderr))
-	stdout, stderr := c.StdoutStderr()
+	stdout, stderr := sh.Cmd(bootstrap, rootDir).StdoutStderr()
 	if got, want := stdout, fmt.Sprintf("Please add %s to your PATH.\n", filepath.Join(rootDir, ".jiri_root", "scripts")); got != want {
 		t.Errorf("stdout got %q, want %q", got, want)
 	}
@@ -42,7 +39,7 @@
 }
 
 func TestBootstrapJiriAlreadyExists(t *testing.T) {
-	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf})
+	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf, PropagateChildOutput: true})
 	defer sh.Cleanup()
 
 	bootstrap, err := filepath.Abs("./scripts/bootstrap_jiri")
@@ -50,9 +47,7 @@
 		t.Fatalf("couldn't determine absolute path to bootstrap_jiri script")
 	}
 	rootDir := sh.MakeTempDir()
-	c := sh.Cmd(bootstrap, []string{rootDir}...)
-	c.AddStdoutWriter(gosh.NopWriteCloser(os.Stdout))
-	c.AddStderrWriter(gosh.NopWriteCloser(os.Stderr))
+	c := sh.Cmd(bootstrap, rootDir)
 	c.ExitErrorIsOk = true
 	stdout, stderr := c.StdoutStderr()
 	if c.Err == nil {
diff --git a/which_test.go b/which_test.go
index 1e5383d..dbe46f1 100644
--- a/which_test.go
+++ b/which_test.go
@@ -6,7 +6,6 @@
 
 import (
 	"fmt"
-	"os"
 	"path/filepath"
 	"testing"
 
@@ -14,8 +13,9 @@
 )
 
 func TestWhich(t *testing.T) {
-	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf})
+	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf, PropagateChildOutput: true})
 	defer sh.Cleanup()
+
 	jiriBinary := sh.BuildGoPkg("v.io/jiri")
 	stdout, stderr := sh.Cmd(jiriBinary, []string{"which"}...).StdoutStderr()
 	if got, want := stdout, fmt.Sprintf("# binary\n%s\n", jiriBinary); got != want {
@@ -28,17 +28,14 @@
 
 // TestWhichScript tests the behavior of "jiri which" for the shim script.
 func TestWhichScript(t *testing.T) {
-	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf})
+	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf, PropagateChildOutput: true})
 	defer sh.Cleanup()
 
 	jiriScript, err := filepath.Abs("./scripts/jiri")
 	if err != nil {
 		t.Fatalf("couldn't determine absolute path to jiri script")
 	}
-	c := sh.Cmd(jiriScript, []string{"which"}...)
-	c.AddStdoutWriter(gosh.NopWriteCloser(os.Stdout))
-	c.AddStderrWriter(gosh.NopWriteCloser(os.Stderr))
-	stdout, stderr := c.StdoutStderr()
+	stdout, stderr := sh.Cmd(jiriScript, "which").StdoutStderr()
 	if got, want := stdout, fmt.Sprintf("# script\n%s\n", jiriScript); got != want {
 		t.Errorf("stdout got %q, want %q", got, want)
 	}
