问题
I am using the z Shell (zsh
) instead of the default bash, and something wrong happen so that all commands who used to work are no longer recognized:
ls
zsh: command not found: ls
open -e .zshrc
zsh: correct 'open' to '_open' [nyae]?
I don't know how to reset zsh
or how to fix this. Here is the content of $PATH
variable:
echo $PATH
/Users/Malloc/bin/Sencha/Cmd/3.1.2.342:/usr/local/bin/mate
I cannot open the .bash_profile
file nor .zshrc
file, seems the only solution is to reset the zsh
. Any ideas?
EDIT:
I even tried to reset zsh
as indicated in this thread, but always got command not found
error:
exec zsh
zsh: command not found: zsh
so what's going on? why all commands are lost?
回答1:
It's evident that you've managed to mess up your PATH
variable. (Your current PATH
doesn't contain any location where common utilities are located.)
Try:
PATH=/bin:/usr/bin:/usr/local/bin:${PATH}
export PATH
Alternatively, for "resetting" zsh, specify the complete path to the shell:
exec /bin/zsh
or
exec /usr/bin/zsh
回答2:
Use a good text editor like VS Code and open your
.zshrc
file (should be in your home directory. if you don't see it, be sure to right-click in the file folder when opening and choose option to 'show hidden files').find where it states:
export PATH=a-bunch-of-paths-separated-by-colons:
insert this at the end of the line, before the end-quote:
:$HOME/.local/bin
And it should work for you.
You can test if this will work first by typing this in your terminal first: export PATH=$HOME/.local/bin:$PATH
If the error disappears after you type this into the terminal and your terminal functions normally, the above solution will work. If it doesn't, you'll have to find the folder where your reference error is located (the thing not found), and replace the PATH above with the PATH-TO-THAT-FOLDER.
回答3:
In your ~/.zsh config file include the path to your bash path file that contains your aliases. In my case it was including the line "source ~/.bash_profile" inside of ~/.zsh .
回答4:
You can create a symlink in /usr/local/bin/
sudo ln -s $HOME/.composer/vendor/bin/homestead /usr/local/bin/homestead
回答5:
For me just restarting my terminal seemed to fix the issue.
回答6:
I fixed the issue by opening the terminal preference general tab and changing the Command (complete path) to /bin/bash
to default and then editing the ~/.zshrc
file.

export PATH="all your path inside the quotes"
...without any whitespace between the PATH="
and save the file.

After saving the file, change the /bin/zsh
in your command or select default

...and restart terminal and you should have your zsh shell working again!
回答7:
If you like me, you will have two terminals app, one is the default terminal with bash as the default shell and another iTerm 2 with zsh as its shell. To have both commands and zsh in iTerm 2 from bash, you need to do the following:
On iTerm 2, go to preferences (or command ,). Then go to the profile tab and go down to command. As you can see on the picture below, you need to select command option and paste path of zsh shell (to find the path, you can do which zsh
).
At this point you will have the zsh as your default shell ONLY for iTerm 2 and you will have bash as the global default shell on default mac terminal app. Next, we are still missing the commands from bash in zsh. So to do this, you need to go on your bash (where you have your commands working) and get the PATH variable from env (use this command to do that: env | grep PATH
).
Once you have that, go to your iTerm 2 and paste your path on "send text at start" option.
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin && clear
Just reopen iTerm 2 and we are done!
回答8:
Restarting the terminal also made the trick for me.
回答9:
As others have said, simply restarting the terminal after you've made changes should reset and changes you've made to your ~/.zshrc file. For instance after adding function to open visual studio:
function code {
if [[ $# = 0 ]]
then
open -a "Visual Studio Code"
else
local argPath="$1"
[[ $1 = /* ]] && argPath="$1" || argPath="$PWD/${1#./}"
open -a "Visual Studio Code" "$argPath"
fi
}
I was able to use the keyword code to open the program from the command line.
回答10:
A way to edit the .zshrc file without doing it through iTerm2 or native Terminal on macOS is to use a terminal in another application. For example, I used the terminal as part of VSCode and was able to find and edit the file.
回答11:
In my case, it was by mistake the commented code was uncommented at the very first line.
# If you come from bash you might have to change your $PATH.
The hash was removed. After adding it back worked fine.
I just posted this here so someone might find this helpful. Because it's just start of the line and might be deleted by mistake like I had done. And seems there's no solution after trying several ways.
回答12:
Uninstall and reinstall zsh worked for me:
sudo yum remove zsh
sudo yum install -y zsh
来源:https://stackoverflow.com/questions/18428374/commands-not-found-on-zsh