I am trying to move to zsh from Bash.
I put my .bashrc directly to my .zshrc, and it caused a lot of errors when I try to use Bash again.
How can you exp
You can't "export" your .bashrc
to a .zshrc
. .bashrc
is a file that runs bash
commands. .zshrc
is a file that runs zsh
commands.
You can't expect zsh
to be able to run the bash
commands in your .bashrc
, so you should convert it into a new .zshrc
instead of trying to run .bashrc
from .zshrc
or copying the former into the latter.
If you want a common shell initialization file for all your shells; use .profile
(and remove .bashrc
and .zshrc
). It's sourced by all POSIX shells. And in there, stick to POSIX shell features only. Then that code will run in any POSIX shell. (Though, I'm not 100% certain that zsh
is POSIX compliant).
See: http://mywiki.wooledge.org/DotFiles.
Though - and I'd first misread this part of your question - you shouldn't experience errors from bash
when running your .bashrc
unless you put zsh
commands in there. Did you? What errors are you getting? Sounds to me like you've added zsh
code into your .bashrc
and bash
(obviously) doesn't understand.
As an aside, ojblass
tries to make a point of portability which only partly succeeds. zsh
is a great shell (though I haven't had the honors myself), but when writing scripts; I'd recommend you do so with #!/usr/bin/env bash
instead. Mostly just for your own (and eventually, the people you share with their) sake of portability.
While lhunath's answer pushed me in the right direction, zsh does not seem to source .profile
automatically. Lot's of good info on this topic can be found on this superuser post.
The adaption I'm using is putting common aliases and functions in .profile
and manually sourcing them as follows:
In ~/.bashrc
:
source ~/.profile
In ~/.zshrc
:
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
emulate is a zsh builtin command. With single argument set up zsh options to emulate the specified shell as much as possible.