The issue occurs because the system cannot locate essential binaries like
cd due to a corrupted or incomplete
$PATH environment variable. To fix this, you must edit your shell configuration file (
.zshrc for macOS Catalina and later) to define a correct path that includes standard directories such as
/usr/bin,
/bin, and
/usr/local/bin. Restoring these entries allows the terminal to execute commands properly again.
Identifying the Path Corruption
Before making changes, it is important to confirm that the problem is indeed related to the path variable. Open your Terminal application and type
echo $PATH. If the output is empty, contains only custom directories without system paths, or shows an error message stating that the command is not found, your path is broken. Common symptoms include being unable to use basic utilities like
ls,
pwd, or
cd. This often happens after manually editing shell configuration files or installing software that modifies the environment incorrectly.
Editing the Shell Configuration File
Most modern versions of macOS use Zsh as the default shell. The configuration file for Zsh is located at
~/.zshrc. You can edit this file using any text editor, but
nano is user-friendly and pre-installed. Run the following command in your terminal:
nano ~/.zshrc
If you are using an older version of macOS with Bash as the default shell, the file would be
~/.bash_profile or
~/.bashrc. However, for current systems, focus on
.zshrc. Once the file opens, scroll to the bottom or find the section where
$PATH is defined. It might look something like this:
export PATH="/custom/path:/another/path"
This line overwrites the existing path instead of appending to it, which causes the loss of system commands.
Setting the Correct Path Variable
To resolve the issue, you need to ensure that the standard system directories are included in your path. Replace the incorrect export line with the following definition. This ensures that your custom paths are added while preserving access to core utilities:
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"
Here is what each part does:
- /usr/local/bin: Contains software installed via Homebrew or manual compilation.
- /usr/bin: The primary directory for macOS system utilities.
- /bin: Essential binaries required for booting and basic operations.
- /usr/sbin and /sbin: System administration tools.
- $PATH: Appends any previously defined custom paths to the end, ensuring they remain accessible.
If you have specific custom directories, add them before the existing
$PATH variable so they take precedence if there are conflicts. Save the file by pressing
Ctrl+O, then
Enter, and exit with
Ctrl+X.
Applying Changes and Verifying
After saving the configuration file, the changes will not apply to currently open terminal windows. You must either close and reopen Terminal or run the following command to reload the configuration immediately:
source ~/.zshrc
Once reloaded, verify that the path is correct by running
echo $PATH again. You should see a long string containing the standard directories listed above. Test the functionality by typing
cd /tmp followed by
pwd. If these commands execute without errors, the issue is resolved. For further troubleshooting on shell behavior, you might find
Shell Programs Not Refreshing Screen Correctly useful if you encounter display issues alongside path problems.
Deleting Old or Conflicting Paths
Sometimes, multiple lines in the configuration file may define
$PATH in conflicting ways. To clean up old entries, search through your
.zshrc file for any other lines starting with
export PATH=. Remove or comment out these lines by adding a
# at the beginning. For example:
# export PATH="/old/broken/path"
This prevents the shell from processing outdated references that might override your new settings. Be careful not to remove lines that set variables for specific applications unless you know their purpose. After cleaning up, save the file and run
source ~/.zshrc again to apply the cleaned configuration.
Frequently Asked Questions
Why did my common commands stop working suddenly?
This usually happens when a shell configuration file is edited incorrectly, causing the
$PATH variable to be overwritten rather than appended. Other causes include accidental deletion of the configuration file or corruption during a system update.
How do I recover if I accidentally deleted all paths?
You can restore the default path by running the export command directly in the terminal session:
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin". This temporary fix allows you to edit the configuration file safely using a text editor.
What is the difference between .zshrc and .bash_profile?
.zshrc is used by the Zsh shell, which is the default on macOS Catalina and newer.
.bash_profile is used by Bash, the default on older macOS versions. Check your default shell by running
echo $SHELL to determine which file to edit.
Can I use a GUI editor to modify these files?
Yes, you can open
~/.zshrc in TextEdit or VS Code. However, ensure you save it as plain text and not Rich Text Format (RTF), which adds hidden characters that break shell scripts. Command-line editors like
nano are safer for this purpose.
How do I check if Homebrew is affecting my path?
Homebrew typically installs to
/usr/local/bin (Intel Macs) or
/opt/homebrew/bin (Apple Silicon). Ensure these directories are included in your
$PATH variable. If Homebrew commands fail, verify that the installation script added the correct path to your configuration file.