diff --git a/cmd/jiri/bootstrap_jiri_test.go b/cmd/jiri/bootstrap_jiri_test.go
index c0300ac..ebab84a 100644
--- a/cmd/jiri/bootstrap_jiri_test.go
+++ b/cmd/jiri/bootstrap_jiri_test.go
@@ -17,7 +17,8 @@
 )
 
 func TestBootstrapJiri(t *testing.T) {
-	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf, PropagateChildOutput: true})
+	sh := gosh.NewShell(t)
+	sh.PropagateChildOutput = true
 	defer sh.Cleanup()
 
 	bootstrap, err := filepath.Abs("./scripts/bootstrap_jiri")
@@ -43,7 +44,8 @@
 // TestBuildJiriLocally checks that the jiri binary built in the bootstrap
 // script can be built locally.
 func TestBuildJiriLocally(t *testing.T) {
-	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf, PropagateChildOutput: true})
+	sh := gosh.NewShell(t)
+	sh.PropagateChildOutput = true
 	defer sh.Cleanup()
 
 	// Extract jiri package path from this line.
@@ -66,7 +68,8 @@
 }
 
 func TestBootstrapJiriAlreadyExists(t *testing.T) {
-	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf, PropagateChildOutput: true})
+	sh := gosh.NewShell(t)
+	sh.PropagateChildOutput = true
 	defer sh.Cleanup()
 
 	bootstrap, err := filepath.Abs("./scripts/bootstrap_jiri")
diff --git a/cmd/jiri/import_test.go b/cmd/jiri/import_test.go
index 2410fd4..5e9c6d7 100644
--- a/cmd/jiri/import_test.go
+++ b/cmd/jiri/import_test.go
@@ -135,19 +135,18 @@
 `,
 		},
 	}
-	opts := gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf}
-	sh := gosh.NewShell(opts)
+	sh := gosh.NewShell(t)
 	defer sh.Cleanup()
 	jiriTool := gosh.BuildGoPkg(sh, sh.MakeTempDir(), "v.io/jiri/cmd/jiri")
 	for _, test := range tests {
-		if err := testImport(opts, jiriTool, test); err != nil {
+		if err := testImport(t, jiriTool, test); err != nil {
 			t.Errorf("%v: %v", test.Args, err)
 		}
 	}
 }
 
-func testImport(opts gosh.Opts, jiriTool string, test importTestCase) error {
-	sh := gosh.NewShell(opts)
+func testImport(t *testing.T, jiriTool string, test importTestCase) error {
+	sh := gosh.NewShell(t)
 	defer sh.Cleanup()
 	tmpDir := sh.MakeTempDir()
 	jiriRoot := filepath.Join(tmpDir, "root")
diff --git a/cmd/jiri/upgrade_test.go b/cmd/jiri/upgrade_test.go
index 7aae9c5..8803792 100644
--- a/cmd/jiri/upgrade_test.go
+++ b/cmd/jiri/upgrade_test.go
@@ -198,20 +198,19 @@
 `,
 		},
 	}
-	opts := gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf}
-	sh := gosh.NewShell(opts)
+	sh := gosh.NewShell(t)
 	defer sh.Cleanup()
 	jiriTool := gosh.BuildGoPkg(sh, sh.MakeTempDir(), "v.io/jiri/cmd/jiri")
 	for _, test := range tests {
-		if err := testUpgrade(opts, jiriTool, test); err != nil {
+		if err := testUpgrade(t, jiriTool, test); err != nil {
 			t.Errorf("%v: %v", test.Args, err)
 		}
 	}
 }
 
-func testUpgrade(opts gosh.Opts, jiriTool string, test upgradeTestCase) error {
-	opts.PropagateChildOutput = true
-	sh := gosh.NewShell(opts)
+func testUpgrade(t *testing.T, jiriTool string, test upgradeTestCase) error {
+	sh := gosh.NewShell(t)
+	sh.PropagateChildOutput = true
 	defer sh.Cleanup()
 	jiriRoot := sh.MakeTempDir()
 	sh.Pushd(jiriRoot)
@@ -260,7 +259,7 @@
 }
 
 func TestUpgradeRevert(t *testing.T) {
-	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf})
+	sh := gosh.NewShell(t)
 	defer sh.Cleanup()
 	jiriRoot := sh.MakeTempDir()
 	sh.Pushd(jiriRoot)
diff --git a/cmd/jiri/which_test.go b/cmd/jiri/which_test.go
index 1e2fe4b..c329ea7 100644
--- a/cmd/jiri/which_test.go
+++ b/cmd/jiri/which_test.go
@@ -13,7 +13,8 @@
 )
 
 func TestWhich(t *testing.T) {
-	sh := gosh.NewShell(gosh.Opts{Fatalf: t.Fatalf, Logf: t.Logf, PropagateChildOutput: true})
+	sh := gosh.NewShell(t)
+	sh.PropagateChildOutput = true
 	defer sh.Cleanup()
 
 	jiriBinary := gosh.BuildGoPkg(sh, sh.MakeTempDir(), "v.io/jiri/cmd/jiri")
@@ -28,7 +29,8 @@
 
 // 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, PropagateChildOutput: true})
+	sh := gosh.NewShell(t)
+	sh.PropagateChildOutput = true
 	defer sh.Cleanup()
 
 	jiriScript, err := filepath.Abs("./scripts/jiri")
diff --git a/profiles/profilescmdline/manager_test.go b/profiles/profilescmdline/manager_test.go
index 5e8e579..0409849 100644
--- a/profiles/profilescmdline/manager_test.go
+++ b/profiles/profilescmdline/manager_test.go
@@ -62,16 +62,6 @@
 	buildInstallersBinDir, buildJiriBinDir = "", ""
 )
 
-func newShell(t *testing.T) *gosh.Shell {
-	fatalf := func(format string, args ...interface{}) {
-		_, file, line, _ := runtime.Caller(3)
-		loc := fmt.Sprintf("%s:%d: ", filepath.Base(file), line)
-		fmt.Fprintf(os.Stderr, loc+format+"\n", args...)
-		t.FailNow()
-	}
-	return gosh.NewShell(gosh.Opts{Fatalf: fatalf, Logf: t.Logf})
-}
-
 // TODO(sadovsky): This code leaves a lot of temp dirs behind. It would be nice
 // to restructure things so that all temporary artifacts get cleaned up.
 func buildInstallers(t *testing.T) string {
@@ -80,7 +70,7 @@
 		if err != nil {
 			t.Fatal(err)
 		}
-		sh := newShell(t)
+		sh := gosh.NewShell(t)
 		defer sh.Cleanup()
 		prefix := "v.io/jiri/profiles/profilescmdline/internal/"
 		gosh.BuildGoPkg(sh, binDir, "v.io/jiri/cmd/jiri", "-o", "jiri")
@@ -97,7 +87,7 @@
 		if err != nil {
 			t.Fatal(err)
 		}
-		sh := newShell(t)
+		sh := gosh.NewShell(t)
 		defer sh.Cleanup()
 		gosh.BuildGoPkg(sh, binDir, "v.io/jiri/cmd/jiri", "-o", "jiri")
 		buildJiriBinDir = binDir
@@ -116,7 +106,7 @@
 func TestManagerAvailable(t *testing.T) {
 	fake, cleanup := jiritest.NewFakeJiriRoot(t)
 	defer cleanup()
-	dir, sh := buildInstallers(t), newShell(t)
+	dir, sh := buildInstallers(t), gosh.NewShell(t)
 	sh.Vars["JIRI_ROOT"] = fake.X.Root
 	sh.Vars["PATH"] = envvar.PrependUsingSeparator(dir, os.Getenv("PATH"), ":")
 	stdout := run(sh, dir, "jiri", "profile", "available", "-v")
@@ -193,7 +183,7 @@
 func TestManagerInstallUninstall(t *testing.T) {
 	fake, cleanup := jiritest.NewFakeJiriRoot(t)
 	defer cleanup()
-	dir, sh := buildInstallers(t), newShell(t)
+	dir, sh := buildInstallers(t), gosh.NewShell(t)
 	sh.Vars["JIRI_ROOT"] = fake.X.Root
 	sh.Vars["PATH"] = envvar.PrependUsingSeparator(dir, os.Getenv("PATH"), ":")
 
@@ -246,7 +236,7 @@
 func TestManagerUpdate(t *testing.T) {
 	fake, cleanup := jiritest.NewFakeJiriRoot(t)
 	defer cleanup()
-	dir, sh := buildInstallers(t), newShell(t)
+	dir, sh := buildInstallers(t), gosh.NewShell(t)
 	sh.Vars["JIRI_ROOT"] = fake.X.Root
 	sh.Vars["PATH"] = dir
 
@@ -294,7 +284,7 @@
 		t.Errorf("got %v, want %v", got, want)
 	}
 
-	dir, sh := buildJiri(t), newShell(t)
+	dir, sh := buildJiri(t), gosh.NewShell(t)
 	sh.Vars["JIRI_ROOT"] = fake.X.Root
 	sh.Vars["PATH"] = envvar.PrependUsingSeparator(dir, os.Getenv("PATH"), ":")
 	run(sh, dir, "jiri", "profile", "list", "-v")
