diff --git a/services/cluster/vkube/vkube_v23_test.go b/services/cluster/vkube/vkube_v23_test.go
index 9dec1fb..4da6460 100644
--- a/services/cluster/vkube/vkube_v23_test.go
+++ b/services/cluster/vkube/vkube_v23_test.go
@@ -5,7 +5,6 @@
 package main_test
 
 import (
-	"bytes"
 	"flag"
 	"fmt"
 	"io/ioutil"
@@ -14,10 +13,11 @@
 	"os/exec"
 	"path/filepath"
 	"strings"
-	"sync"
 	"testing"
 	"text/template"
 
+	"v.io/x/lib/gosh"
+	"v.io/x/lib/textutil"
 	"v.io/x/ref/lib/v23test"
 	"v.io/x/ref/test/testutil"
 )
@@ -65,16 +65,17 @@
 				// Note, creds do not affect non-Vanadium commands.
 				c := sh.Cmd(name, args...).WithCredentials(creds)
 				c.ExitErrorIsOk = true
-				w := &writer{name: filepath.Base(name)}
-				c.AddStdoutWriter(w)
-				c.AddStderrWriter(w)
-				c.Run()
+				plw := textutil.PrefixLineWriter(os.Stdout, filepath.Base(name)+"> ")
+				c.AddStdoutWriter(gosh.NopWriteCloser(plw))
+				c.AddStderrWriter(gosh.NopWriteCloser(plw))
+				output := c.CombinedOutput()
+				plw.Flush()
 				if expectSuccess && c.Err != nil {
 					t.Error(testutil.FormatLogLine(2, "Unexpected failure: %s %s :%v", name, strings.Join(args, " "), c.Err))
 				} else if !expectSuccess && c.Err == nil {
 					t.Error(testutil.FormatLogLine(2, "Unexpected success %d: %s %s", name, strings.Join(args, " ")))
 				}
-				return w.output()
+				return output
 			}
 		}
 		gsutil      = cmd("gsutil", true)
@@ -261,51 +262,6 @@
 }`)).Execute(f, params)
 }
 
-// writer is an io.Writer that sends everything to stdout, each line prefixed
-// with "name> ".
-type writer struct {
-	sync.Mutex
-	name string
-	line bytes.Buffer
-	out  bytes.Buffer
-}
-
-func (w *writer) Write(p []byte) (n int, err error) {
-	w.Lock()
-	defer w.Unlock()
-	n = len(p)
-	w.out.Write(p)
-	for len(p) > 0 {
-		if w.line.Len() == 0 {
-			fmt.Fprintf(&w.line, "%s> ", w.name)
-		}
-		if off := bytes.IndexByte(p, '\n'); off != -1 {
-			off += 1
-			w.line.Write(p[:off])
-			w.line.WriteTo(os.Stdout)
-			p = p[off:]
-			continue
-		}
-		w.line.Write(p)
-		break
-	}
-	return
-}
-
-func (w *writer) Close() error {
-	return nil
-}
-
-func (w *writer) output() string {
-	w.Lock()
-	defer w.Unlock()
-	if w.line.Len() != 0 {
-		w.line.WriteString(" [no \\n at EOL]\n")
-		w.line.WriteTo(os.Stdout)
-	}
-	return w.out.String()
-}
-
 func TestMain(m *testing.M) {
 	os.Exit(v23test.Run(m.Run))
 }
