Learn Docker With My Newest Course

Dive into Docker takes you from "What is Docker?" to confidently applying Docker to your own projects. It's packed with best practices and examples. Start Learning Docker →

Respecting the cd or exit Pattern Suggested by ShellCheck SC2164


Even if you plan to use set -e it feels like a reasonable idea to add this to most cd commands you use in a script.

Quick Jump: Demo Video

For example, in your script instead of cd some/path you’d do cd some/path || exit.

The idea is that if you make a typo in your path it could lead to files be deleted in the wrong directory later on in the script when it’s expected you’re in that path instead of the original path since the cd command failed.

Using set -e in your scripts is a great idea and will protect you against this in most cases without needing to add || exit but this feels similar to concepts around security where having layers of protection is a good idea.

Perhaps you temporarily set +e to make it easier to script around an expected error and forget to turn it back on again. When files are potentially being created or deleted I like the extra peace of mind especially when || exit is so easy to do.

ShellCheck also warns you of this with SC2164.

Demo Video


  • 0:16 – The problem with cd’ing into a path in a script
  • 0:47 – Using set -e helps but let’s protect ourselves even more
  • 1:13 – The or exit pattern helps protect against errors for any command
  • 2:05 – ShellCheck will warn of you and it knows about set -e too
  • 3:20 – I ran into this when running my aliases file against ShellCheck

Will you be using this pattern in your shell scripts? Let us know!

Never Miss a Tip, Trick or Tutorial

Like you, I'm super protective of my inbox, so don't worry about getting spammed. You can expect a few emails per month (at most), and you can 1-click unsubscribe at any time. See what else you'll get too.