web-dev-qa-db-ja.com

「ネストされた」セッションを行わずにzshプロセスを再起動します

永続的なtmuxセッションを1つ保持し、~/.zshrcを頻繁に変更し、source ~/.zshrcを実行するため、zshセッションを再開したいと思います。ただし、これは時間の経過とともに遅くなることに気付きました(たとえば、for i inseq 50; do source ~/.zshrc; echo "a"; doneは 'a'の出力を速く開始し、すぐに遅くなります)。

ここで提案を読んでzshを再起動します。提案は、単にzshまたはzsh -lを実行することです。ただし、それを行う場合、正しく理解していれば、「ネストされた」zshセッションを作成します。つまり、次のことを意味します。

# Simulate slowed zsh session
for i in `seq 50`; do source ~/.zshrc; echo "a"; done
# use zsh to make it faster "child" zsh
zsh
# confirm fast
source ~/.zshrc; # fast
# revert back to "parent" zsh
exit
# confirm old slow session is still there
source ~/.zshrc; # slow

複数のウィンドウとコマンド履歴を使用したtmuxセッションがあり、永続性を維持したいと考えています。だから私は持続可能な解決策を探しています。

ボーナス質問:source ~/.zshrcが遅くなる理由を誰かが知っていますか?

# Path to your oh-my-zsh installation.
export ZSH="/Users/username/.oh-my-zsh"

ZSH_THEME="themename"

# Which plugins would you like to load?
# Standard plugins can be found in ~/.oh-my-zsh/plugins/*
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(Rails git textmate Ruby lighthouse)
# Add wisely, as too many plugins slow down Shell startup.
plugins=(
  git
)

source $ZSH/oh-my-zsh.sh


# activate zsh-syntax-highlighting (brew install zsh-syntax-highlighting)
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

function proxyON() {
...redacted
}

function proxyOFF(){
 http_proxy=
 https_proxy=
 HTTP_PROXY=
 HTTPS_PROXY=
 export http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
}

function nukeDS_Store(){
 find ~/Projects/mys/ -name '.DS_Store' -delete
}

function reload-ssh() {
   ssh-add -e /Library/OpenSC/lib/opensc-pkcs11.so >> /dev/null
   if [ $? -gt 0 ]; then
       echo "Failed to remove previous card"
   fi
   ssh-add -s /Library/OpenSC/lib/opensc-pkcs11.so 
}

alias fastBuild='mvn install --offline -DskipTests=true'

## History Settings
# set history size
export HISTSIZE=1000000
#save history after logout
export SAVEHIST=1000000
##history file
export HISTFILE=~/.zhistory
##save only one command if 2 common are same and consistent
setopt HIST_IGNORE_DUPS
##add timestamp for each entry
setopt EXTENDED_HISTORY   
##have seperate history for each
setopt nosharehistory
##dont append into history file
setopt NOINC_APPEND_HISTORY


# Set Java version
export Java_HOME=`/usr/libexec/Java_home -v 1.8.0_191`


# Maven
export M3_HOME="/Applications/Apache-maven-3.6.0" # replace n.n.n with appropriate version
export M3=$M3_HOME/bin
export PATH=$M3:$PATH

## set node version
export PATH="/usr/local/opt/node@8/bin:$PATH"

## pic-tools
source /Projects/pic-tools/scripts/*.env

3
ozgeneral

実行中のzshインスタンスを新しいものに置き換えるだけです。

exec zsh

execShell builtinコマンドであり、次の目的で使用されます(zshbuiltinsmanページを参照)。

現在のシェルをフォークではなくコマンドに置き換えます。

なぜ遅くなっているのか...私の最初の推測は、zshrcでPATHを再定義し、おそらくかなり遅いドライブに1つのディレクトリを置くことです。したがって、zshrcを調達するたびに、検索パスはますます長くなります。そして、zshがますます多くのディレクトリを再ハッシュする必要があるたびに...

私の 別の回答 その状況を改善する方法についての質問を読んでください。

4
mpy