SC2164 – ShellCheck Wiki

See this page on GitHub


Use cd ... || exit in case cd fails.

Problematic code:

cd generated_files
rm -r *.c
  cd foo

Correct code:

cd generated_files || exit
rm -r *.c
# For functions, you may want to use return:
  cd foo || return


cd can fail for a variety of reasons: misspelled paths, missing directories, missing permissions, broken symlinks and more.

If/when it does, the script will keep going and do all its operations in the wrong directory. This can be messy, especially if the operations involve creating or deleting a lot of files.

To avoid this, make sure you handle the cases when cd fails. Ways to do this include


ShellCheck does not give this warning when cd is on the left of a || or &&, or the condition of a if, while or until loop. Having a set -e command anywhere in the script will disable this message, even though it won't necessarily prevent the issue.

If you are accounting for cd failures in a way shellcheck doesn't realize, you can disable this message with a directive.

ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.