Migration von Bash zu Zsh für Mac OS Catalina

Migration von Bash zu Zsh für Mac OS Catalina

Wie einige von Ihnen vielleicht wissen, fordert Apple die Benutzer nach dem Upgrade auf Mac OS Catalina auf, zu zsh als Standard-Shell zu migrieren.

Jetzt wird bei jedem Öffnen der Bash eine Warnung angezeigt. Sie kann deaktiviert werden, indem Sie die folgende Zeile zu Ihrem ~/.bash_profile hinzufügen (für diejenigen, die interessiert sind).

export BASH_SILENCE_DEPRECATION_WARNING=1

Ich gehe jedoch davon aus, dass viele (einschließlich mir) zu zsh wechseln möchten.

Mein aktuelles ~/.bash_profile sieht wie folgt aus:

# searches this directory for executables first
export PATH="/usr/local/bin:$PATH"

# jenv
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# pyenv
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"

# nodenv
export PATH="$HOME/.nodenv/bin:$PATH"
eval "$(nodenv init -)"

# node-build-definitions
export NODE_BUILD_DEFINITIONS="/usr/local/opt/node-build-update-defs/share/node-build"

# bash auto-completion
if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion    
fi

# git branch in prompt
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

# bash profile theme
export PS1="\[\e[1;37m\]parthnaik:\[\033[33;1m\]\w\[\033[m\]\$(parse_git_branch) \n$ "
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

# firevault memory security
alias sleepsafe='sudo pmset -a destroyfvkeyonstandby 1 hibernatemode 25 standby 0 standbydelay 0'
alias sleepdefault='sudo pmset -a destroyfvkeyonstandby 0 hibernatemode 3 standby 1 standbydelay 10800'

# enable / disable captive portal
alias disablecaptiveportal='sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -bool false'
alias enablecaptiveportal='sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -bool true'

Ich hatte gehofft, dass mir jemand, der sich besser auskennt als ich, helfen kann, herauszufinden, was wohin gehört, da es online einige widersprüchliche Informationen zu geben scheint.

Soweit ich gelesen habe, sind hier die verschiedenen Vorschläge, die ich bisher gesehen habe:

  1. Kopieren und einfügen von ~/.bash_profile nach ~/.zshrc.
  2. Fügen Sie unten in ~/.zshrc den folgenden Code hinzu:
if [ -f ~/.bash_profile ]; then 
    . ~/.bash_profile;
fi
  1. Erstellen Sie eine ~/.aliases-Datei und eine ~/.paths-Datei und beziehen/importieren Sie sie dann sowohl in ~/bash_profile als auch in ~/.zshrc, um die Abwärtskompatibilität aufrechtzuerhalten.

Darüber hinaus habe ich ein .sh-Skript, das jeden Tag automatisch mit einem Befehl wie diesem ausgeführt wird:

sh script_name.sh

Sollte ich dies ändern, um zsh zu verwenden, wie unten gezeigt? Dies sollte der Fall sein, wenn alle .sh-Skripte mit Bash und Zsh verwendet werden.

zsh script_name.sh

Ich suche nach Ratschlägen und Best Practices für die Migration, obwohl ich weiß, dass alle der oben genannten Möglichkeiten funktional funktionieren würden. Im Idealfall sollen mein Design, die Autovervollständigungen und die Git-Branch-Einstellungen (wie oben in ~/.bash_profile gezeigt) genauso funktionieren wie jetzt.

Ich weiß, dass für das Theme auch ein Plugin namens „oh-my-zsh“ verfügbar ist. Ist die Installation dieses Plugins empfehlenswert?

Danke für die Hilfe!

Antwort1

Ich habe mich entschieden, das Pure-Theme für zsh zu verwenden. Meine Skripte funktionieren wie gewohnt, sie werden jetzt einfach über zsh ausgeführt. So sieht meine ~/.zshrc-Datei aus:

# PATHS AND ALIASES
# searches this directory for executables first
export PATH="/usr/local/bin:$PATH"

# jenv
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# pyenv
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"

# nodenv
export PATH="$HOME/.nodenv/bin:$PATH"
eval "$(nodenv init -)"

# node-build-definitions
export NODE_BUILD_DEFINITIONS="/usr/local/opt/node-build-update-defs/share/node-build"

# firevault memory security
alias sleepsafe='sudo pmset -a destroyfvkeyonstandby 1 hibernatemode 25 standby 0 standbydelay 0'
alias sleepdefault='sudo pmset -a destroyfvkeyonstandby 0 hibernatemode 3 standby 1 standbydelay 10800'

# enable / disable captive portal
alias disablecaptiveportal='sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -bool false'
alias enablecaptiveportal='sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -bool true'

# CLI SETTINGS
# enable the default zsh completions
autoload -Uz compinit && compinit

# set colors for displaying directories and files when the ls command is used
export LSCOLORS='GxFxCxDxBxegedabagaced'
export CLICOLOR=1

# theme
fpath+=("$HOME/.zsh/pure")
autoload -U promptinit && promptinit
prompt pure

# change the path color
zstyle :prompt:pure:path color white

verwandte Informationen