The PowerShell core team has done a great job with improving PowerShell as an interactive experience, to the point that I’ve decided to use it as my interactive shell on OSX.
This will be a short article on setting up
pwsh on macOS. It assumes that you have basic shell familiarity, and have homebrew installed.
chsh -s $SHELL is how one changes which shell is used by default for interactive shells. After running
brew install pwsh, you should have
/usr/local/bin/pwsh at the end of your
This works well for the most part, but every time you spawn a
pwsh session, you’ll see some startup text. Suppressing this text is quite possible, but isn’t directly documented anywhere.
The first part of the puzzle is that any executable file can work as an entry in
/etc/shells, which means we can create a sh (or zsh, in my case) script that starts pwsh with some flags.
Then, looking over the output of
pwsh --help, two flags stand out:
-NoLogo | -nol
Hides the copyright banner at startup of interactive sessions.
-Login | -l
On Linux and macOS, starts PowerShell as a login shell, using /bin/sh to
execute login profiles such as /etc/profile and ~/.profile. On Windows,
this switch does nothing.
[!IMPORTANT] This parameter must come first to start PowerShell as a login shell. The parameter is ignored if passed in any other position.
EDIT: In an earlier version of this article, I used zsh as the shebang line in these scripts, but ran into some bug around resizing the terminal. Switching to pwsh as the wrapping shell seems to fix that bug.
Putting this all together, I ran
sudo nvim /usr/local/bin/pwsh.nologo and filled the file with the following contents:
/usr/local/bin/pwsh -Login -nol
After saving that, be sure to run
sudo chmod +x /usr/local/bin/pwsh.nologo so that the script is executable.
chsh -s usr/local/bin/pwsh.nologo, and add
$env:SHELL = "/usr/local/bin/pwsh.nologo";
to your PowerShell profile (edit
$PROFILE from a pwsh session, creating folders as needed).