Миграция с bash на zsh для Mac OS Catalina

Миграция с bash на zsh для Mac OS Catalina

Как некоторые из вас знают, после обновления до Mac OS Catalina компания Apple предлагает пользователям перейти на zsh в качестве оболочки по умолчанию.

Теперь есть предупреждение, которое появляется каждый раз при открытии bash. Его можно отключить, добавив строку ниже в ваш ~/.bash_profile (для тех, кому интересно).

export BASH_SILENCE_DEPRECATION_WARNING=1

Однако я полагаю, что многие (включая меня) захотят перейти на zsh.

Мой текущий ~/.bash_profile выглядит следующим образом:

# 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'

Я надеялся, что кто-то более знающий, чем я, сможет помочь мне понять, что и куда идет, поскольку в Интернете встречается противоречивая информация.

На данный момент, из того, что я прочитал, я увидел следующие предложения:

  1. Скопируйте и вставьте ~/.bash_profile в ~/.zshrc.
  2. Добавляем следующий код в конец ~/.zshrc:
if [ -f ~/.bash_profile ]; then 
    . ~/.bash_profile;
fi
  1. Создание файла ~/.aliases и файла ~/.paths, а затем их импорт в ~/bash_profile и ~/.zshrc для поддержания обратной совместимости.

В дополнение к этому у меня есть скрипт .sh, который автоматически запускается каждый день с помощью команды типа:

sh script_name.sh

Должен ли я изменить это, чтобы использовать zsh, как показано ниже? Это должно быть так, если все скрипты .sh с bash и zsh.

zsh script_name.sh

Ищу советы и лучшие практики для миграции, хотя знаю, что любой из вышеперечисленных вариантов будет работать с точки зрения функциональности. В идеале, хотелось бы, чтобы моя тема, автодополнения и настройки ветки git (как показано в ~/.bash_profile выше) работали так же, как сейчас.

Для темы, я знаю, что есть плагин под названием 'oh-my-zsh', который также доступен. Рекомендуется ли его устанавливать?

Спасибо вам за помощь!

решение1

Я решил использовать чистую тему для zsh. Мои скрипты работают как обычно, они просто запускаются через zsh. Вот как выглядит мой файл ~/.zshrc:

# 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

Связанный контент