diff --git a/shell-conduit.cabal b/shell-conduit.cabal
--- a/shell-conduit.cabal
+++ b/shell-conduit.cabal
@@ -1,5 +1,5 @@
 name:                shell-conduit
-version:             4.2
+version:             4.3
 synopsis:            Write shell scripts with Conduit
 description:         Write shell scripts with Conduit. See "Data.Conduit.Shell" for documentation.
 license:             BSD3
@@ -19,6 +19,7 @@
                      Data.Conduit.Shell.TH
                      Data.Conduit.Shell.Process
                      Data.Conduit.Shell.Types
+                     Data.Conduit.Shell.Segments
                      Data.Conduit.Shell.Variadic
   build-depends:     async >= 2.0.1.5
                    , base >= 4 && <5
diff --git a/src/Data/Conduit/Shell.hs b/src/Data/Conduit/Shell.hs
--- a/src/Data/Conduit/Shell.hs
+++ b/src/Data/Conduit/Shell.hs
@@ -110,11 +110,11 @@
   where
 
 import Data.Conduit
-import qualified Data.Conduit.Shell.PATH
-import Data.Conduit.Shell.PATH
+import Data.Conduit.Shell.PATH hiding (strings)
 import Data.Conduit.Shell.Process
 import Data.Conduit.Shell.Types
 import Data.Conduit.Shell.Variadic
+import qualified Data.Text.Encoding as T
 
 -- $exports
 --
diff --git a/src/Data/Conduit/Shell/PATH.hs b/src/Data/Conduit/Shell/PATH.hs
--- a/src/Data/Conduit/Shell/PATH.hs
+++ b/src/Data/Conduit/Shell/PATH.hs
@@ -7,10 +7,18 @@
 
 module Data.Conduit.Shell.PATH where
 
-import Control.Monad
-import Data.Conduit.Shell.Process
-import Data.Conduit.Shell.TH
-import Data.List
-import Prelude
+import           Control.Monad
+import           Control.Monad.IO.Class
+import           Data.Conduit.Shell.Process
+import           Data.Conduit.Shell.TH
+import           Data.Conduit.Shell.Variadic
+import           Data.List
+import qualified Data.Text as T (unpack)
+import           Prelude
+import           System.Directory
+
+-- | Helpful CD command.
+cd :: (MonadIO m,CmdArg arg) => arg -> m ()
+cd fp = liftIO (setCurrentDirectory (T.unpack (toTextArg fp)))
 
 $(generateBinaries)
diff --git a/src/Data/Conduit/Shell/Process.hs b/src/Data/Conduit/Shell/Process.hs
--- a/src/Data/Conduit/Shell/Process.hs
+++ b/src/Data/Conduit/Shell/Process.hs
@@ -18,6 +18,7 @@
   ,Segment
   ,ProcessException(..)
   ,ToChunk(..)
+  ,tryS
   )
   where
 
diff --git a/src/Data/Conduit/Shell/Segments.hs b/src/Data/Conduit/Shell/Segments.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Conduit/Shell/Segments.hs
@@ -0,0 +1,23 @@
+-- | Helpful segment combinators.
+
+module Data.Conduit.Shell.Segments where
+
+import qualified Data.ByteString.Char8 as S8
+import           Data.Conduit
+import qualified Data.Conduit.List as CL
+import qualified Data.Conduit.Binary as CB
+import           Data.Conduit.Shell.Process
+import           Data.Text (Text)
+import qualified Data.Text.Encoding as T
+
+-- | Extract the 'String' values from a segment.
+strings :: Segment () -> Segment [String]
+strings s = s $| conduit (CB.lines $= CL.map S8.unpack $= CL.consume)
+
+-- | Extract the 'Text' values from a segment.
+texts :: Segment () -> Segment [Text]
+texts s = s $| conduit (CB.lines $= CL.map T.decodeUtf8 $= CL.consume)
+
+-- | Ignore any output from a segment.
+ignore :: Segment () -> Segment ()
+ignore s = fmap (const ()) (s $| conduit (CL.consume))
